func (s *openGLState) reset(context *opengl.Context) error { if err := context.Reset(); err != nil { return err } s.lastProgram = zeroProgram s.lastProjectionMatrix = nil s.lastColorMatrix = nil s.lastColorMatrixTranslation = nil if s.arrayBuffer != zeroBuffer { context.DeleteBuffer(s.arrayBuffer) } if s.indexBufferQuads != zeroBuffer { context.DeleteBuffer(s.indexBufferQuads) } if s.programTexture != zeroProgram { context.DeleteProgram(s.programTexture) } shaderVertexModelviewNative, err := context.NewShader(opengl.VertexShader, shader(context, shaderVertexModelview)) if err != nil { panic(fmt.Sprintf("graphics: shader compiling error:\n%s", err)) } defer context.DeleteShader(shaderVertexModelviewNative) shaderFragmentTextureNative, err := context.NewShader(opengl.FragmentShader, shader(context, shaderFragmentTexture)) if err != nil { panic(fmt.Sprintf("graphics: shader compiling error:\n%s", err)) } defer context.DeleteShader(shaderFragmentTextureNative) s.programTexture, err = context.NewProgram([]opengl.Shader{ shaderVertexModelviewNative, shaderFragmentTextureNative, }) if err != nil { return err } s.arrayBuffer = theArrayBufferLayout.newArrayBuffer(context) indices := make([]uint16, 6*maxQuads) for i := uint16(0); i < maxQuads; i++ { indices[6*i+0] = 4*i + 0 indices[6*i+1] = 4*i + 1 indices[6*i+2] = 4*i + 2 indices[6*i+3] = 4*i + 1 indices[6*i+4] = 4*i + 2 indices[6*i+5] = 4*i + 3 } s.indexBufferQuads = context.NewBuffer(opengl.ElementArrayBuffer, indices, opengl.StaticDraw) return nil }
func (a *arrayBufferLayout) newArrayBuffer(c *opengl.Context) opengl.Buffer { return c.NewBuffer(opengl.ArrayBuffer, a.totalBytes()*4*maxQuads, opengl.DynamicDraw) }