glutil.monkey2 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. #If __TARGET__="windows" Or Not __DESKTOP_TARGET__
  76. source="precision mediump float;~n"+source
  77. #Endif
  78. Local shader:=glCreateShader( type )
  79. glShaderSourceEx( shader,source )
  80. glCompileShader( shader )
  81. glGetShaderiv( shader,GL_COMPILE_STATUS,Varptr tmpi )
  82. If Not tmpi
  83. Local lines:=source.Split( "~n" )
  84. For Local i:=0 Until lines.Length
  85. Print (i+1)+":~t"+lines[i]
  86. Next
  87. RuntimeError( "Failed to compile fragment shader:"+glGetShaderInfoLogEx( shader ) )
  88. Endif
  89. Return shader
  90. End
  91. #rem monkeydoc @hidden
  92. #end
  93. Function glLink:Void( program:Int )
  94. glLinkProgram( program )
  95. glGetProgramiv( program,GL_LINK_STATUS,Varptr tmpi )
  96. If Not tmpi RuntimeError( "Failed to link program:"+glGetProgramInfoLogEx( program ) )
  97. End