func (video *Video) initGL() { video.fpsmanager = gfx.NewFramerate() video.fpsmanager.SetFramerate(60) gl.ClearColor(0.0, 0.0, 0.0, 1.0) gl.Enable(gl.CULL_FACE) gl.Enable(gl.DEPTH_TEST) video.prog = createProgram(vertShaderSrcDef, fragShaderSrcDef) posAttrib := attribLocation(video.prog, "vPosition") texCoordAttr := attribLocation(video.prog, "vTexCoord") paletteLoc := uniformLocation(video.prog, "palette") video.textureUni = uniformLocation(video.prog, "texture") video.texture = GenTexture() gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, video.texture) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST) gl.UseProgram(video.prog) gl.EnableVertexAttribArray(posAttrib) gl.EnableVertexAttribArray(texCoordAttr) gl.Uniform3iv(paletteLoc, len(nes.ShaderPalette), nes.ShaderPalette) // gl.Uniform4iv(paletteLoc, len(PaletteRgb), PaletteRgb) vertVBO := GenBuffer() checkGLError() gl.BindBuffer(gl.ARRAY_BUFFER, vertVBO) verts := []float32{-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0} gl.BufferData(gl.ARRAY_BUFFER, len(verts)*4, gl.Void(&verts[0]), gl.STATIC_DRAW) textCoorBuf := GenBuffer() checkGLError() gl.BindBuffer(gl.ARRAY_BUFFER, textCoorBuf) texVerts := []float32{0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0} gl.BufferData(gl.ARRAY_BUFFER, len(texVerts)*4, gl.Void(&texVerts[0]), gl.STATIC_DRAW) gl.VertexAttribPointer(posAttrib, 2, gl.FLOAT, false, 0, 0) gl.VertexAttribPointer(texCoordAttr, 2, gl.FLOAT, false, 0, 0) log.Printf("OPENGL INITIALIZED.......") }
func (video *Video) drawFrame() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.UseProgram(video.prog) gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, video.texture) if video.pixelBuffer != nil { gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 256, 256, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, gl.Void(&(<-video.pixelBuffer)[0])) } gl.DrawArrays(gl.TRIANGLES, 0, 6) video.fpsmanager.FramerateDelay() }
func GenTexture() uint { var tex uint gl.GenBuffers(1, gl.Void(&tex)) return tex }
func GenBuffer() uint { var buf uint gl.GenBuffers(1, gl.Void(&buf)) return buf }