protected override void Initialize() { string vertShader = @"attribute vec3 vertPosition; attribute vec3 vertColor; varying vec3 fragColor; void main() { gl_Position = vec4(vertPosition, 1.0); fragColor = vertColor; }"; string fragShader = @"precision mediump float; varying vec3 fragColor; void main() { gl_FragColor = vec4(fragColor, 1.0); }"; uint vertexShader = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER); uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER); _program = glCreateProgram(); if (_program == 0) { throw new InvalidOperationException("Failed to create program."); } glAttachShader(_program, vertexShader); glAttachShader(_program, fragmentShader); glBindAttribLocation(_program, 0, "vertPosition"); glBindAttribLocation(_program, 1, "vertColor"); GLUtils.LinkProgram(_program); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); }
protected override void Initialize() { string vertShader = @"attribute vec3 vertPosition; attribute vec3 vertColor; attribute vec2 vertTexCoord; varying vec3 fragColor; varying vec2 fragTexCoord; void main() { gl_Position = vec4(vertPosition, 1.0); fragColor = vertColor; fragTexCoord = vertTexCoord; }"; string fragShader = @"precision mediump float; varying vec3 fragColor; varying vec2 fragTexCoord; uniform sampler2D fragTexture; void main() { gl_FragColor = texture2D(fragTexture, fragTexCoord); }"; string screenFragShader = @"precision mediump float; varying vec3 fragColor; varying vec2 fragTexCoord; uniform sampler2D fragTexture; uniform float fragTime; void main() { gl_FragColor = texture2D(fragTexture, fragTexCoord + 0.005 * vec2(sin(fragTime + 1024.0 * fragTexCoord.x), cos(fragTime + 768.0 * fragTexCoord.y))); }"; uint vertexShader = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER); uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER); uint screenFragmentShader = GLUtils.CompileShader(screenFragShader, GL_FRAGMENT_SHADER); _program = glCreateProgram(); if (_program == 0) { throw new InvalidOperationException("Failed to create program."); } glAttachShader(_program, vertexShader); glAttachShader(_program, fragmentShader); glBindAttribLocation(_program, 0, "vertPosition"); glBindAttribLocation(_program, 1, "vertColor"); glBindAttribLocation(_program, 2, "vertTexCoord"); GLUtils.LinkProgram(_program); _fragTextureLocation = glGetUniformLocation(_program, "fragTexture"); _screenProgram = glCreateProgram(); if (_screenProgram == 0) { throw new InvalidOperationException("Failed to create program."); } glAttachShader(_screenProgram, vertexShader); glAttachShader(_screenProgram, screenFragmentShader); glBindAttribLocation(_screenProgram, 0, "vertPosition"); glBindAttribLocation(_screenProgram, 1, "vertColor"); glBindAttribLocation(_screenProgram, 2, "vertTexCoord"); GLUtils.LinkProgram(_screenProgram); _screenFragTextureLocation = glGetUniformLocation(_screenProgram, "fragTexture"); _screenFragTimeLocation = glGetUniformLocation(_screenProgram, "fragTime"); glGenTextures(1, out _texture); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _texture); // Image is an RGBImage. var image = Image.LoadTga("Box.tga").To <Rgb24>(); using (var data = image.GetDataPointer()) { glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGB, image.Width, image.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, data.Pointer); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR); glGenFramebuffers(1, out _framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer); glGenTextures(1, out _framebufferTexture); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _framebufferTexture); glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, IntPtr.Zero); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _framebufferTexture, 0); uint framebufferStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (framebufferStatus != GL_FRAMEBUFFER_COMPLETE) { throw new InvalidOperationException($"Framebuffer Incomplete: 0x{framebufferStatus:X}"); } glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); }
protected override void Initialize() { string vertShader = @"attribute vec3 vertPosition; attribute vec2 vertTexCoord; varying vec2 fragTexCoord; uniform mat4 vertTransform; void main() { gl_Position = vertTransform * vec4(vertPosition, 1.0); fragTexCoord = vertTexCoord; }"; string fragShader = @"precision mediump float; varying vec3 fragColor; varying vec2 fragTexCoord; uniform sampler2D fragTexture; void main() { gl_FragColor = texture2D(fragTexture, fragTexCoord); }"; uint vertexShader = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER); uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER); _program = glCreateProgram(); if (_program == 0) { throw new InvalidOperationException("Failed to create program."); } glAttachShader(_program, vertexShader); glAttachShader(_program, fragmentShader); glBindAttribLocation(_program, 0, "vertPosition"); glBindAttribLocation(_program, 1, "vertTexCoord"); GLUtils.LinkProgram(_program); _vertTransformLocation = glGetUniformLocation(_program, "vertTransform"); _fragTextureLocation = glGetUniformLocation(_program, "fragTexture"); uint[] textures = new uint[2]; glGenTextures(2, out textures[0]); _backgroundTexture = textures[0]; _fireTexture = textures[1]; glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _backgroundTexture); var image = Image.LoadPng("opengles.png").To <Rgba32>(); _backgroundWidth = image.Width; _backgroundHeight = image.Height; using (var data = image.GetDataPointer()) { glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, image.Width, image.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data.Pointer); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR); glBindTexture(GL_TEXTURE_2D, _fireTexture); glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, _fireWidth - _firePadding, _fireHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, IntPtr.Zero); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR); glEnable(GL_BLEND); glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // Initialize the bottom row of pixels with the last color. for (int x = 0; x < _fireWidth; x++) { SetFirePixel(x, _fireHeight - 1, _fireColors.Length - 1); } }
protected override void Initialize() { string vertShader = @"attribute vec3 vertPosition; attribute vec3 vertColor; attribute vec2 vertTexCoord; varying vec3 fragColor; varying vec2 fragTexCoord; void main() { gl_Position = vec4(vertPosition, 1.0); fragColor = vertColor; fragTexCoord = vertTexCoord; }"; string fragShader = @"precision mediump float; varying vec3 fragColor; varying vec2 fragTexCoord; uniform sampler2D fragTexture; void main() { gl_FragColor = texture2D(fragTexture, fragTexCoord); }"; uint vertexShader = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER); uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER); _program = glCreateProgram(); if (_program == 0) { throw new InvalidOperationException("Failed to create program."); } glAttachShader(_program, vertexShader); glAttachShader(_program, fragmentShader); glBindAttribLocation(_program, 0, "vertPosition"); glBindAttribLocation(_program, 1, "vertColor"); glBindAttribLocation(_program, 2, "vertTexCoord"); GLUtils.LinkProgram(_program); _fragTextureLocation = glGetUniformLocation(_program, "fragTexture"); uint texture; glGenTextures(1, &texture); _texture = texture; glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _texture); // Image is an RGBImage. var image = Image.LoadTga("Box.tga").To <Rgb24>(); using (var data = image.GetDataPointer()) { glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGB, image.Width, image.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, (void *)data.Pointer); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); }
protected override void Initialize() { string vertShader = @"attribute vec2 vertPosition; attribute vec2 vertTexCoord; attribute vec4 vertColor; varying vec2 fragTexCoord; varying vec4 fragColor; uniform mat4 vertProjection; void main() { gl_Position = vertProjection * vec4(vertPosition.xy, 0, 1); fragTexCoord = vertTexCoord; fragColor = vertColor; }"; string fragShader = @"precision mediump float; varying vec2 fragTexCoord; varying vec4 fragColor; uniform sampler2D fragTexture; void main() { gl_FragColor = fragColor * texture2D(fragTexture, fragTexCoord); }"; uint vertexShader = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER); uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER); _program = glCreateProgram(); if (_program == 0) { throw new InvalidOperationException("Failed to create program."); } glAttachShader(_program, vertexShader); glAttachShader(_program, fragmentShader); glBindAttribLocation(_program, 0, "vertPosition"); glBindAttribLocation(_program, 1, "vertTexCoord"); glBindAttribLocation(_program, 2, "vertColor"); GLUtils.LinkProgram(_program); _vertProjectionLocation = glGetUniformLocation(_program, "vertProjection"); _fragTextureLocation = glGetUniformLocation(_program, "fragTexture"); glGenTextures(1, out _texture); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _texture); var context = ImGui.CreateContext(); ImGui.SetCurrentContext(context); ImGui.StyleColorsDark(); var io = ImGui.GetIO(); io.Fonts.AddFontDefault(); io.Fonts.GetTexDataAsRGBA32(out byte *pixels, out int width, out int height, out int _); glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR); io.Fonts.SetTexID((IntPtr)_texture); io.Fonts.ClearTexData(); SetKeyMap(); glClearColor(1.0f, 0.0f, 1.0f, 1.0f); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); glGenBuffers(1, out _vertexBuffer); glGenBuffers(1, out _indexBuffer); glEnable(GL_BLEND); glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); }