VBOs+attributes+drawing with VBOs

This commit is contained in:
bloeys
2021-10-23 21:47:54 +04:00
parent bb9a2885e2
commit 5e3123b00e
6 changed files with 98 additions and 53 deletions

49
shaders/shader_program.go Executable file
View File

@ -0,0 +1,49 @@
package shaders
import (
"github.com/bloeys/go-sdl-engine/logging"
"github.com/go-gl/gl/v4.6-compatibility/gl"
)
type ShaderProgram struct {
ID uint32
VertShaderID uint32
FragShaderID uint32
}
func (sp *ShaderProgram) AttachShader(shader Shader) {
gl.AttachShader(sp.ID, shader.ID)
switch shader.ShaderType {
case VertexShaderType:
sp.VertShaderID = shader.ID
case FragmentShaderType:
sp.FragShaderID = shader.ID
default:
logging.ErrLog.Println("Unknown shader type ", shader.ShaderType, " for ID ", shader.ID)
}
}
func (sp *ShaderProgram) Link() {
gl.LinkProgram(sp.ID)
if sp.VertShaderID != 0 {
gl.DeleteShader(sp.VertShaderID)
}
if sp.FragShaderID != 0 {
gl.DeleteShader(sp.FragShaderID)
}
}
func (sp *ShaderProgram) GetAttribLoc(attribName string) int32 {
return gl.GetAttribLocation(sp.ID, gl.Str(attribName+"\x00"))
}
func (sp *ShaderProgram) Use() {
gl.UseProgram(sp.ID)
}
func (sp *ShaderProgram) Delete() {
gl.DeleteProgram(sp.ID)
}

View File

@ -18,41 +18,6 @@ func (s Shader) Delete() {
gl.DeleteShader(s.ID)
}
type ShaderProgram struct {
ID uint32
VertShaderID uint32
FragShaderID uint32
}
func (sp *ShaderProgram) AttachShader(shader Shader) {
gl.AttachShader(sp.ID, shader.ID)
switch shader.ShaderType {
case VertexShaderType:
sp.VertShaderID = shader.ID
case FragmentShaderType:
sp.FragShaderID = shader.ID
default:
logging.ErrLog.Println("Unknown shader type ", shader.ShaderType, " for ID ", shader.ID)
}
}
func (sp *ShaderProgram) Link() {
gl.LinkProgram(sp.ID)
if sp.VertShaderID != 0 {
gl.DeleteShader(sp.VertShaderID)
}
if sp.FragShaderID != 0 {
gl.DeleteShader(sp.FragShaderID)
}
}
func (sp *ShaderProgram) Delete() {
gl.DeleteProgram(sp.ID)
}
func NewShaderProgram() (ShaderProgram, error) {
id := gl.CreateProgram()