diff --git a/Makefile b/Makefile index a71867e..43aba25 100644 --- a/Makefile +++ b/Makefile @@ -59,8 +59,6 @@ OBJS = \ src/collada/effect.o \ src/collada/node_state.o \ src/collada/animate.o \ - src/lua_api.o \ - src/pixel_line_art.o \ src/flame.o \ src/audio.o \ data/scenes/ship20/ship20.o \ diff --git a/shader/minecraft.frag b/shader/minecraft.frag index 5ca4139..06df946 100644 --- a/shader/minecraft.frag +++ b/shader/minecraft.frag @@ -1,4 +1,4 @@ -#version 330 core +#version 430 core in VS_OUT { vec3 Position; // world coordinates @@ -16,9 +16,7 @@ layout (location = 1) out vec4 Normal; layout (location = 2) out vec3 Color; layout (location = 3) out vec4 Block; -uniform sampler2D TerrainSampler; -uniform vec3 MousePosition; -uniform vec3 MousePosition2; +layout (location = 1) uniform sampler2D TerrainSampler; void main() { diff --git a/shader/minecraft.vert b/shader/minecraft.vert index 65f5826..64e7f31 100644 --- a/shader/minecraft.vert +++ b/shader/minecraft.vert @@ -1,15 +1,15 @@ -#version 330 core +#version 430 core // per-vertex: -in vec3 Position; -in vec3 Normal; -in vec2 Texture; +layout (location = 0) in vec3 Position; +layout (location = 1) in vec3 Normal; +layout (location = 2) in vec2 Texture; // per-instance: -in vec3 BlockPosition; -in int BlockID; -in int Data; -in int TextureID; -in int Special; +layout (location = 3) in vec3 BlockPosition; +layout (location = 4) in int BlockID; +layout (location = 5) in int Data; +layout (location = 6) in int TextureID; +layout (location = 7) in int Special; out VS_OUT { vec3 Position; @@ -22,7 +22,7 @@ out VS_OUT { flat int Special; } vs_out; -uniform mat4 Transform; +layout (location = 0) uniform mat4 Transform; vec3 orientation(vec3 position) { diff --git a/src/main.cpp b/src/main.cpp index 2676071..665234d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -126,8 +126,8 @@ int main() } load("."); - audio::init(); - audio::load(); + //audio::init(); + //audio::load(); update_window(1024, 1024); @@ -150,13 +150,20 @@ int main() case SDL_EVENT_GAMEPAD_REMOVED: remove_gamepad(event.gdevice.which); break; + case SDL_EVENT_MOUSE_BUTTON_DOWN: + if (event.button.button == 1) { + update_mouse(event.button.x, event.button.y); + } + break; + default: + break; } } update(); draw(); - audio::update(); + //audio::update(); SDL_GL_SwapWindow(window); } diff --git a/src/minecraft.cpp b/src/minecraft.cpp index 3e12ec1..fd7c06f 100644 --- a/src/minecraft.cpp +++ b/src/minecraft.cpp @@ -15,7 +15,7 @@ #include "world/world.h" namespace minecraft { - struct location { + struct layout { struct { unsigned int position; unsigned int normal; @@ -25,7 +25,7 @@ namespace minecraft { unsigned int data; unsigned int texture_id; unsigned int special; - } attrib; + } attribute; struct { unsigned int transform; unsigned int terrain_sampler; @@ -33,7 +33,23 @@ namespace minecraft { }; static unsigned int program; - static location location; + static layout const layout = { + .attribute = { + .position = 0, + .normal = 1, + .texture = 2, + + .block_position = 3, + .block_id = 4, + .data = 5, + .texture_id = 6, + .special = 7, + }, + .uniform = { + .transform = 0, + .terrain_sampler = 1, + } + }; static unsigned int vertex_array_object; static unsigned int per_vertex_buffer; @@ -53,32 +69,6 @@ namespace minecraft { program = compile_from_files("shader/minecraft.vert", NULL, "shader/minecraft.frag"); - - location.attrib.position = glGetAttribLocation(program, "Position"); - location.attrib.normal = glGetAttribLocation(program, "Normal"); - location.attrib.texture = glGetAttribLocation(program, "Texture"); - - location.attrib.block_position = glGetAttribLocation(program, "BlockPosition"); - location.attrib.block_id = glGetAttribLocation(program, "BlockID"); - location.attrib.data = glGetAttribLocation(program, "Data"); - location.attrib.texture_id = glGetAttribLocation(program, "TextureID"); - location.attrib.special = glGetAttribLocation(program, "Special"); - printf("minecraft program:\n"); - printf(" attributes:\n position %u\n normal %u\n texture %u\n block_position %u\n block_id %u\n data %u\n texture_id %u\n special %u\n", - location.attrib.position, - location.attrib.normal, - location.attrib.texture, - location.attrib.block_position, - location.attrib.block_id, - location.attrib.data, - location.attrib.texture_id, - location.attrib.special); - - location.uniform.transform = glGetUniformLocation(program, "Transform"); - location.uniform.terrain_sampler = glGetUniformLocation(program, "TerrainSampler"); - printf(" uniforms:\n transform %u\n terrain_sampler %u\n", - location.uniform.transform, - location.uniform.terrain_sampler); } void load_vertex_attributes() @@ -89,37 +79,37 @@ namespace minecraft { glVertexBindingDivisor(0, 0); glVertexBindingDivisor(1, 1); - glEnableVertexAttribArray(location.attrib.position); - glVertexAttribFormat(location.attrib.position, 3, GL_HALF_FLOAT, GL_FALSE, 0); - glVertexAttribBinding(location.attrib.position, 0); + glEnableVertexAttribArray(layout.attribute.position); + glVertexAttribFormat(layout.attribute.position, 3, GL_HALF_FLOAT, GL_FALSE, 0); + glVertexAttribBinding(layout.attribute.position, 0); - glEnableVertexAttribArray(location.attrib.normal); - glVertexAttribFormat(location.attrib.normal, 3, GL_HALF_FLOAT, GL_FALSE, 6); - glVertexAttribBinding(location.attrib.normal, 0); + glEnableVertexAttribArray(layout.attribute.normal); + glVertexAttribFormat(layout.attribute.normal, 3, GL_HALF_FLOAT, GL_FALSE, 6); + glVertexAttribBinding(layout.attribute.normal, 0); - glEnableVertexAttribArray(location.attrib.texture); - glVertexAttribFormat(location.attrib.texture, 2, GL_HALF_FLOAT, GL_FALSE, 12); - glVertexAttribBinding(location.attrib.texture, 0); + glEnableVertexAttribArray(layout.attribute.texture); + glVertexAttribFormat(layout.attribute.texture, 2, GL_HALF_FLOAT, GL_FALSE, 12); + glVertexAttribBinding(layout.attribute.texture, 0); - glEnableVertexAttribArray(location.attrib.block_position); - glVertexAttribFormat(location.attrib.block_position, 3, GL_SHORT, GL_FALSE, 0); - glVertexAttribBinding(location.attrib.block_position, 1); + glEnableVertexAttribArray(layout.attribute.block_position); + glVertexAttribFormat(layout.attribute.block_position, 3, GL_SHORT, GL_FALSE, 0); + glVertexAttribBinding(layout.attribute.block_position, 1); - glEnableVertexAttribArray(location.attrib.block_id); - glVertexAttribIFormat(location.attrib.block_id, 1, GL_SHORT, 8); - glVertexAttribBinding(location.attrib.block_id, 1); + glEnableVertexAttribArray(layout.attribute.block_id); + glVertexAttribIFormat(layout.attribute.block_id, 1, GL_SHORT, 8); + glVertexAttribBinding(layout.attribute.block_id, 1); - glEnableVertexAttribArray(location.attrib.data); - glVertexAttribIFormat(location.attrib.data, 1, GL_SHORT, 10); - glVertexAttribBinding(location.attrib.data, 1); + glEnableVertexAttribArray(layout.attribute.data); + glVertexAttribIFormat(layout.attribute.data, 1, GL_SHORT, 10); + glVertexAttribBinding(layout.attribute.data, 1); - glEnableVertexAttribArray(location.attrib.texture_id); - glVertexAttribIFormat(location.attrib.texture_id, 1, GL_SHORT, 12); - glVertexAttribBinding(location.attrib.texture_id, 1); + glEnableVertexAttribArray(layout.attribute.texture_id); + glVertexAttribIFormat(layout.attribute.texture_id, 1, GL_SHORT, 12); + glVertexAttribBinding(layout.attribute.texture_id, 1); - glEnableVertexAttribArray(location.attrib.special); - glVertexAttribIFormat(location.attrib.special, 1, GL_SHORT, 14); - glVertexAttribBinding(location.attrib.special, 1); + glEnableVertexAttribArray(layout.attribute.special); + glVertexAttribIFormat(layout.attribute.special, 1, GL_SHORT, 14); + glVertexAttribBinding(layout.attribute.special, 1); glBindVertexArray(0); } @@ -289,8 +279,8 @@ namespace minecraft { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture); - glUniformMatrix4fv(location.uniform.transform, 1, false, (float *)&view::state.float_transform); - glUniform1i(location.uniform.terrain_sampler, 0); + glUniformMatrix4fv(layout.uniform.transform, 1, false, (float *)&view::state.float_transform); + glUniform1i(layout.uniform.terrain_sampler, 0); //glEnable(GL_CULL_FACE); //glCullFace(GL_FRONT);