mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
54 lines
981 B
Go
Executable File
54 lines
981 B
Go
Executable File
package shaders
|
|
|
|
import (
|
|
"github.com/bloeys/nmage/logging"
|
|
"github.com/go-gl/gl/v4.1-core/gl"
|
|
)
|
|
|
|
type ShaderProgram struct {
|
|
Id uint32
|
|
VertShaderId uint32
|
|
FragShaderId uint32
|
|
GeomShaderId uint32
|
|
}
|
|
|
|
func (sp *ShaderProgram) AttachShader(shader Shader) {
|
|
|
|
gl.AttachShader(sp.Id, shader.Id)
|
|
switch shader.Type {
|
|
case ShaderType_Vertex:
|
|
sp.VertShaderId = shader.Id
|
|
case ShaderType_Fragment:
|
|
sp.FragShaderId = shader.Id
|
|
case ShaderType_Geometry:
|
|
sp.GeomShaderId = shader.Id
|
|
default:
|
|
logging.ErrLog.Fatalf("Unknown shader type '%d' for shader id '%d'\n", shader.Type, 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)
|
|
}
|
|
|
|
if sp.GeomShaderId != 0 {
|
|
gl.DeleteShader(sp.GeomShaderId)
|
|
}
|
|
}
|
|
|
|
func (s *ShaderProgram) Bind() {
|
|
gl.UseProgram(s.Id)
|
|
}
|
|
|
|
func (s *ShaderProgram) UnBind() {
|
|
gl.UseProgram(0)
|
|
}
|