/OJGL/GLShadersLoader.j

http://github.com/tartiflop/ojgl · Unknown · 79 lines · 60 code · 19 blank · 0 comment · 0 complexity · 28ae9565d802316f3a424bb28cde7376 MD5 · raw file

  1. @import <Foundation/CPObject.j>
  2. @implementation GLShadersLoader : CPObject {
  3. id _target;
  4. SEL _onComplete;
  5. CPString _vertexShader;
  6. CPString _fragmentShader;
  7. CPURLConnection _vertexShaderConnection;
  8. CPURLConnection _fragmentShaderConnection;
  9. }
  10. - (id)initWithShader:(CPString)vertexShaderURL fragmentShaderURL:(CPString)fragmentShaderURL target:(id)target onComplete:(SEL)onComplete {
  11. self = [super init];
  12. if (self) {
  13. _target = target;
  14. _onComplete = onComplete;
  15. // Get vertex shader
  16. var vertexShaderRequest = [CPURLRequest requestWithURL:vertexShaderURL];
  17. _vertexShaderConnection = [CPURLConnection connectionWithRequest:vertexShaderRequest delegate:self];
  18. // Get fragment shader
  19. var fragmentShaderRequest = [CPURLRequest requestWithURL:fragmentShaderURL];
  20. _fragmentShaderConnection = [CPURLConnection connectionWithRequest:fragmentShaderRequest delegate:self];
  21. }
  22. return self;
  23. }
  24. - (CPString)vertexShader {
  25. return _vertexShader;
  26. }
  27. - (CPString)fragmentShader {
  28. return _fragmentShader;
  29. }
  30. - (void)connection:(CPURLConnection)connection didReceiveData:(CPString)data {
  31. if (connection == _vertexShaderConnection) {
  32. // Verify that the data is not empty: could be that the file has not been found
  33. if (data == "") {
  34. CPLog.error("Vertex shader is empty");
  35. return;
  36. }
  37. CPLog.info("got vertex shader");
  38. _vertexShader = data;
  39. } else if (connection == _fragmentShaderConnection) {
  40. if (data == "") {
  41. // Verify that the data is not empty: could be that the file has not been found
  42. CPLog.error("Fragment shader is empty");
  43. return;
  44. }
  45. CPLog.info("got fragment shader");
  46. _fragmentShader = data;
  47. }
  48. // If both vertex and fragment shaders have been successfully loaded then call selector
  49. if (_vertexShader && _fragmentShader) {
  50. objj_msgSend(_target, _onComplete);
  51. }
  52. }
  53. - (void)connection:(CPURLConnection)connection didFailWithError:(CPString)error {
  54. if (connection == _vertexShaderConnection) {
  55. CPLog.error("Failed to get vertex shader");
  56. } else if (connection == _fragmentShaderConnection) {
  57. CPLog.error("Failed to get fragment shader");
  58. }
  59. }
  60. @end