glutil.monkey2 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. Namespace mojo.graphics.glutil
  2. Private
  3. Global tmpi:Int
  4. Public
  5. #rem monkeydoc @hidden
  6. #end
  7. Global glGraphicsSeq:Int=1
  8. #rem monkeydoc @hidden
  9. #end
  10. Function glCheck()
  11. Local err:=glGetError()
  12. If err=GL_NO_ERROR Return
  13. Assert( False,"GL ERROR! err="+err )
  14. End
  15. #rem monkeydoc @hidden
  16. #end
  17. Function glFormat:GLenum( format:PixelFormat )
  18. Select format
  19. Case PixelFormat.A8 Return GL_ALPHA
  20. Case PixelFormat.I8 Return GL_LUMINANCE
  21. Case PixelFormat.IA16 Return GL_LUMINANCE_ALPHA
  22. Case PixelFormat.RGB24 Return GL_RGB
  23. Case PixelFormat.RGBA32 Return GL_RGBA
  24. End
  25. Assert( False,"Invalidate PixelFormat" )
  26. Return GL_RGBA
  27. End
  28. #rem monkeydoc @hidden
  29. #end
  30. Function glPushTexture2d:Void( tex:Int )
  31. glGetIntegerv( GL_TEXTURE_BINDING_2D,Varptr tmpi )
  32. glBindTexture( GL_TEXTURE_2D,tex )
  33. End
  34. #rem monkeydoc @hidden
  35. #end
  36. Function glPopTexture2d:Void()
  37. glBindTexture( GL_TEXTURE_2D,tmpi )
  38. End
  39. #rem monkeydoc @hidden
  40. #end
  41. Function glPushArrayBuffer( buf:Int )
  42. glGetIntegerv( GL_ARRAY_BUFFER_BINDING,Varptr tmpi )
  43. glBindBuffer( GL_ARRAY_BUFFER,buf )
  44. End
  45. #rem monkeydoc @hidden
  46. #end
  47. Function glPopArrayBuffer()
  48. glBindBuffer( GL_ARRAY_BUFFER,tmpi )
  49. End
  50. #rem monkeydoc @hidden
  51. #end
  52. Function glPushElementArrayBuffer( buf:Int )
  53. glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING,Varptr tmpi )
  54. glBindBuffer( GL_ELEMENT_ARRAY_BUFFER,buf )
  55. End
  56. #rem monkeydoc @hidden
  57. #end
  58. Function glPopElementArrayBuffer()
  59. glBindBuffer( GL_ELEMENT_ARRAY_BUFFER,tmpi )
  60. End
  61. #rem monkeydoc @hidden
  62. #end
  63. Function glPushFramebuffer:Void( framebuf:Int )
  64. glGetIntegerv( GL_FRAMEBUFFER_BINDING,Varptr tmpi )
  65. glBindFramebuffer( GL_FRAMEBUFFER,framebuf )
  66. End
  67. #rem monkeydoc @hidden
  68. #end
  69. Function glPopFramebuffer:Void()
  70. glBindFramebuffer( GL_FRAMEBUFFER,tmpi )
  71. End
  72. #rem monkeydoc @hidden
  73. #end
  74. Function glCompile:Int( type:Int,source:String )
  75. source="
  76. #ifdef GL_ES
  77. #ifdef GL_FRAGMENT_PRECISION_HIGH
  78. precision highp float;
  79. #else
  80. precision mediump float;
  81. #endif
  82. #endif
  83. "+source
  84. Local shader:=glCreateShader( type )
  85. glShaderSourceEx( shader,source )
  86. glCompileShader( shader )
  87. glGetShaderiv( shader,GL_COMPILE_STATUS,Varptr tmpi )
  88. If Not tmpi
  89. Local lines:=source.Split( "~n" )
  90. For Local i:=0 Until lines.Length
  91. Print (i+1)+":~t"+lines[i]
  92. Next
  93. RuntimeError( "Failed to compile fragment shader:"+glGetShaderInfoLogEx( shader ) )
  94. Endif
  95. Return shader
  96. End
  97. #rem monkeydoc @hidden
  98. #end
  99. Function glLink:Void( program:Int )
  100. glLinkProgram( program )
  101. glGetProgramiv( program,GL_LINK_STATUS,Varptr tmpi )
  102. If Not tmpi RuntimeError( "Failed to link program:"+glGetProgramInfoLogEx( program ) )
  103. End