example icon indicating copy to clipboard operation
example copied to clipboard

Cel Shader Example

Open shehackedyou opened this issue 2 years ago • 2 comments

I like how simple this project is go-gl isn't trying to be a full engine just control over gl, which is nice because I want to build a 3D scene to be streamed.

Any recommendations on how to implement custom shaders? Itd be nice to be able to switch between them, it would create a mechanic.

shehackedyou avatar Jan 07 '24 06:01 shehackedyou

	vertexShader, err := compileShader(vertexShaderSource, gl.VERTEX_SHADER)
	if err != nil {
		return 0, err
	}

gl.AttachShader(program, vertexShader)

# Then you can delete and presumably re-add to make the switch
gl.DeleteShader(program, vertexShader)

shehackedyou avatar Jan 07 '24 06:01 shehackedyou

func compileShader(source string, shaderType uint32) (uint32, error) {
	shader := gl.CreateShader(shaderType)

	csources, free := gl.Strs(source)
	gl.ShaderSource(shader, 1, csources, nil)
	free()
	gl.CompileShader(shader)

	var status int32
	gl.GetShaderiv(shader, gl.COMPILE_STATUS, &status)
	if status == gl.FALSE {
		var logLength int32
		gl.GetShaderiv(shader, gl.INFO_LOG_LENGTH, &logLength)

		log := strings.Repeat("\x00", int(logLength+1))
		gl.GetShaderInfoLog(shader, logLength, nil, gl.Str(log))

		return 0, fmt.Errorf("failed to compile %v: %v", source, log)
	}

	return shader, nil
}

shehackedyou avatar Jan 07 '24 06:01 shehackedyou