mirror of
https://github.com/Kugelschieber/go-game.git
synced 2026-01-18 06:40:28 +00:00
Removed shader, added 3D rendering (no demo yet, coming next), started bitmap font rendering, a few fixes and improvements.
This commit is contained in:
117
game.go
117
game.go
@@ -22,14 +22,15 @@ const (
|
||||
Default_shader_2D_model = "m"
|
||||
Default_shader_2D_tex = "tex"
|
||||
|
||||
// source for 2D shader
|
||||
default_shader_2d_vertex_src = `#version 130
|
||||
uniform mat3 o, m;
|
||||
in vec2 vertex;
|
||||
in vec2 texCoord;
|
||||
out vec2 tc;
|
||||
void main(){
|
||||
tc = texCoord;
|
||||
gl_Position = vec4(o*m*vec3(vertex, 1.0), 1.0);
|
||||
tc = texCoord;
|
||||
gl_Position = vec4(o*m*vec3(vertex, 1.0), 1.0);
|
||||
}`
|
||||
default_shader_2d_fragment_src = `#version 130
|
||||
precision highp float;
|
||||
@@ -37,7 +38,61 @@ const (
|
||||
in vec2 tc;
|
||||
out vec4 color;
|
||||
void main(){
|
||||
color = texture(tex, tc);
|
||||
color = texture(tex, tc);
|
||||
}`
|
||||
|
||||
// constants for default 3D shader
|
||||
Default_shader_3D_vertex_attrib = "vertex"
|
||||
Default_shader_3D_texcoord_attrib = "texCoord"
|
||||
Default_shader_3D_pv = "pv"
|
||||
Default_shader_3D_model = "m"
|
||||
Default_shader_3D_tex = "tex"
|
||||
|
||||
// source for 3D shader
|
||||
default_shader_3d_vertex_src = `#version 130
|
||||
uniform mat4 pv, m;
|
||||
in vec3 vertex;
|
||||
in vec2 texCoord;
|
||||
out vec2 tc;
|
||||
void main(){
|
||||
tc = texCoord;
|
||||
gl_Position = pv*m*vec4(vertex, 1.0);
|
||||
}`
|
||||
default_shader_3d_fragment_src = `#version 130
|
||||
precision highp float;
|
||||
uniform sampler2D tex;
|
||||
in vec2 tc;
|
||||
out vec4 color;
|
||||
void main(){
|
||||
color = texture(tex, tc);
|
||||
}`
|
||||
|
||||
// constants for default text shader
|
||||
Default_shader_text_vertex_attrib = "vertex"
|
||||
Default_shader_text_texcoord_attrib = "texCoord"
|
||||
Default_shader_text_ortho = "o"
|
||||
Default_shader_text_model = "m"
|
||||
Default_shader_text_tex = "tex"
|
||||
Default_shader_text_color = "color"
|
||||
|
||||
// source for text shader
|
||||
default_shader_text_vertex_src = `#version 130
|
||||
uniform mat3 o, m;
|
||||
in vec2 vertex;
|
||||
in vec2 texCoord;
|
||||
out vec2 tc;
|
||||
void main(){
|
||||
tc = texCoord;
|
||||
gl_Position = vec4(o*m*vec3(vertex, 1.0), 1.0);
|
||||
}`
|
||||
default_shader_text_fragment_src = `#version 130
|
||||
precision highp float;
|
||||
uniform sampler2D tex;
|
||||
uniform vec4 color;
|
||||
in vec2 tc;
|
||||
out vec4 c;
|
||||
void main(){
|
||||
c = texture(tex, tc)*color;
|
||||
}`
|
||||
)
|
||||
|
||||
@@ -73,8 +128,10 @@ var (
|
||||
viewportHeight int
|
||||
|
||||
// Default resources
|
||||
DefaultCamera *Camera
|
||||
Default2DShader *Shader
|
||||
DefaultCamera *Camera
|
||||
Default2DShader *Shader
|
||||
Default3DShader *Shader
|
||||
DefaultTextShader *Shader
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -211,7 +268,7 @@ func initGoga(width, height int) {
|
||||
DefaultCamera.CalcRatio()
|
||||
DefaultCamera.CalcOrtho()
|
||||
|
||||
// default shader
|
||||
// default 2D shader
|
||||
shader, err := NewShader(default_shader_2d_vertex_src, default_shader_2d_fragment_src)
|
||||
|
||||
if err != nil {
|
||||
@@ -222,25 +279,52 @@ func initGoga(width, height int) {
|
||||
Default2DShader.BindAttrib(Default_shader_2D_vertex_attrib)
|
||||
Default2DShader.BindAttrib(Default_shader_2D_texcoord_attrib)
|
||||
|
||||
// default 3D shader
|
||||
shader, err = NewShader(default_shader_3d_vertex_src, default_shader_3d_fragment_src)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
Default3DShader = shader
|
||||
Default3DShader.BindAttrib(Default_shader_3D_vertex_attrib)
|
||||
Default3DShader.BindAttrib(Default_shader_3D_texcoord_attrib)
|
||||
|
||||
// default text shader
|
||||
shader, err = NewShader(default_shader_text_vertex_src, default_shader_text_fragment_src)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
DefaultTextShader = shader
|
||||
DefaultTextShader.BindAttrib(Default_shader_text_vertex_attrib)
|
||||
DefaultTextShader.BindAttrib(Default_shader_text_texcoord_attrib)
|
||||
|
||||
// settings and registration
|
||||
ClearColorBuffer(true)
|
||||
EnableAlphaBlending(true)
|
||||
AddLoader(&PngLoader{gl.LINEAR, false})
|
||||
AddLoader(&PlyLoader{gl.STATIC_DRAW})
|
||||
AddSystem(NewSpriteRenderer(nil, nil, false))
|
||||
AddSystem(NewModelRenderer(nil, nil, false))
|
||||
AddSystem(NewCulling2D(0, 0, width, height))
|
||||
}
|
||||
|
||||
func cleanup() {
|
||||
// cleanup resources
|
||||
log.Printf("Cleaning up %v resources", len(resources))
|
||||
log.Printf("Trying to cleaning up %v resources", len(resources))
|
||||
dropped := 0
|
||||
|
||||
for _, res := range resources {
|
||||
if drop, ok := res.(Dropable); ok {
|
||||
drop.Drop()
|
||||
dropped++
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("Dropped %v resources", dropped)
|
||||
|
||||
// cleanup systems
|
||||
log.Printf("Cleaning up %v systems", len(systems))
|
||||
|
||||
@@ -259,6 +343,7 @@ func cleanup() {
|
||||
log.Print("Cleaning up default resources")
|
||||
|
||||
Default2DShader.Drop()
|
||||
DefaultTextShader.Drop()
|
||||
}
|
||||
|
||||
// Stops the game and closes the window.
|
||||
@@ -287,6 +372,15 @@ func ClearDepthBuffer(do bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func removeClearBuffer(buffer uint32) {
|
||||
for i, b := range clearBuffer {
|
||||
if b == buffer {
|
||||
clearBuffer = append(clearBuffer[:i], clearBuffer[i+1:]...)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Enables/Disables alpha blending by source alpha channel.
|
||||
// BLEND = SRC_ALPHA | ONE_MINUS_SRC_ALPHA
|
||||
func EnableAlphaBlending(enable bool) {
|
||||
@@ -332,12 +426,3 @@ func GetWidth() int {
|
||||
func GetHeight() int {
|
||||
return viewportHeight
|
||||
}
|
||||
|
||||
func removeClearBuffer(buffer uint32) {
|
||||
for i, buffer := range clearBuffer {
|
||||
if buffer == buffer {
|
||||
clearBuffer = append(clearBuffer[:i], clearBuffer[i+1:]...)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user