public Texture(GraphicsDevice dev) { this.dev = dev; Gl.glGenTextures(1, out texture); GraphicsDevice.CheckGlError(); }
public Texture(GraphicsDevice dev, Bitmap bitmap) { this.dev = dev; Gl.glGenTextures(1, out texture); GraphicsDevice.CheckGlError(); SetData(bitmap); }
public IndexBuffer(GraphicsDevice dev, int size) { Gl.glGenBuffers(1, out buffer); GraphicsDevice.CheckGlError(); Bind(); Gl.glBufferData(Gl.GL_ELEMENT_ARRAY_BUFFER, new IntPtr(sizeof(ElemType) * size), new ElemType[ size ], Gl.GL_DYNAMIC_DRAW); GraphicsDevice.CheckGlError(); }
public Shader(GraphicsDevice dev, string type) { // Vertex shader string vertexCode; using (var file = new StreamReader(FileSystem.Open("glsl{0}{1}.vert".F(Path.DirectorySeparatorChar, type)))) vertexCode = file.ReadToEnd(); int v = Gl.glCreateShaderObjectARB(Gl.GL_VERTEX_SHADER_ARB); GraphicsDevice.CheckGlError(); Gl.glShaderSourceARB(v,1,new string[]{vertexCode},null); GraphicsDevice.CheckGlError(); Gl.glCompileShaderARB(v); GraphicsDevice.CheckGlError(); int success; Gl.glGetObjectParameterivARB(v, Gl.GL_OBJECT_COMPILE_STATUS_ARB, out success); GraphicsDevice.CheckGlError(); if (success == 0) throw new InvalidProgramException("Compile error in {0}{1}.vert".F(Path.DirectorySeparatorChar, type)); // Fragment shader string fragmentCode; using (var file = new StreamReader(FileSystem.Open("glsl{0}{1}.frag".F(Path.DirectorySeparatorChar, type)))) fragmentCode = file.ReadToEnd(); int f = Gl.glCreateShaderObjectARB(Gl.GL_FRAGMENT_SHADER_ARB); GraphicsDevice.CheckGlError(); Gl.glShaderSourceARB(f,1,new string[]{fragmentCode},null); GraphicsDevice.CheckGlError(); Gl.glCompileShaderARB(f); GraphicsDevice.CheckGlError(); Gl.glGetObjectParameterivARB(f, Gl.GL_OBJECT_COMPILE_STATUS_ARB, out success); GraphicsDevice.CheckGlError(); if (success == 0) throw new InvalidProgramException("Compile error in glsl{0}{1}.frag".F(Path.DirectorySeparatorChar, type)); // Assemble program program = Gl.glCreateProgramObjectARB(); GraphicsDevice.CheckGlError(); Gl.glAttachObjectARB(program,v); GraphicsDevice.CheckGlError(); Gl.glAttachObjectARB(program,f); GraphicsDevice.CheckGlError(); Gl.glLinkProgramARB(program); GraphicsDevice.CheckGlError(); Gl.glGetObjectParameterivARB(program, Gl.GL_OBJECT_LINK_STATUS_ARB, out success); GraphicsDevice.CheckGlError(); if (success == 0) throw new InvalidProgramException("Linking error in {0} shader".F(type)); Gl.glUseProgramObjectARB(program); GraphicsDevice.CheckGlError(); int numUniforms; Gl.glGetObjectParameterivARB( program, Gl.GL_ACTIVE_UNIFORMS, out numUniforms ); GraphicsDevice.CheckGlError(); int nextTexUnit = 1; for( int i = 0 ; i < numUniforms ; i++ ) { int uLen, uSize, uType; var sb = new StringBuilder(128); Gl.glGetActiveUniformARB( program, i, 128, out uLen, out uSize, out uType, sb ); GraphicsDevice.CheckGlError(); if( uType == Gl.GL_SAMPLER_2D_ARB ) { samplers.Add( sb.ToString(), nextTexUnit ); Gl.glUniform1iARB( i, nextTexUnit ); ++nextTexUnit; } } }