Removed shader, added 3D rendering (no demo yet, coming next), started bitmap font rendering, a few fixes and improvements.

This commit is contained in:
Marvin Blum
2016-05-07 20:26:36 +02:00
parent 1d974566de
commit 139e668233
15 changed files with 809 additions and 106 deletions

117
game.go
View File

@@ -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
}
}
}