diff --git a/lib/states/game_states/loading_state.rb b/lib/states/game_states/loading_state.rb index 2537f05..4c36b08 100644 --- a/lib/states/game_states/loading_state.rb +++ b/lib/states/game_states/loading_state.rb @@ -10,13 +10,13 @@ class IMICFPS @dummy_entity = nil @assets = [] @asset_index = 0 + add_asset(:shader, nil, "default") + add_asset(:model, "base", "river_terrain") add_asset(:model, "base", "skydome") add_asset(:model, "base", "tree") add_asset(:model, "base", "biped") - add_asset(:shader, nil, "default") - @act = false @cycled = false diff --git a/lib/wavefront/model.rb b/lib/wavefront/model.rb index c7eb2ad..d4b9dd2 100644 --- a/lib/wavefront/model.rb +++ b/lib/wavefront/model.rb @@ -94,13 +94,13 @@ class IMICFPS tex_ids = [] @faces.each do |face| - verts << face.vertices.map { |vert| [vert.x, vert.y, vert.z] } + verts << face.vertices.map { |vert| [vert.x, vert.y, vert.z] } colors << face.colors.map { |vert| [vert.x, vert.y, vert.z] } norms << face.normals.map { |vert| [vert.x, vert.y, vert.z, vert.weight] } if model_has_texture - uvs << face.uvs.map { |vert| [vert.x, vert.y, vert.z] } - tex_ids << face.material.texture_id ? face.material.texture_id : -1 + uvs << face.uvs.map { |vert| [vert.x, vert.y, vert.z] } + tex_ids << face.material.texture_id ? face.material.texture_id.to_f : -1.0 end end @@ -117,14 +117,14 @@ class IMICFPS data_size += Fiddle::SIZEOF_FLOAT * 3 * colors.size data_size += Fiddle::SIZEOF_FLOAT * 4 * norms.size data_size += Fiddle::SIZEOF_FLOAT * 3 * uvs.size - data_size += Fiddle::SIZEOF_INT * 1 * tex_ids.size + data_size += Fiddle::SIZEOF_FLOAT * 1 * tex_ids.size @vertices_buffer_size = data_size - data = @vertices_buffer_data.flatten.pack("f*") + data = @vertices_buffer_data.flatten glBindBuffer(GL_ARRAY_BUFFER, @vertices_buffer_id) - glBufferData(GL_ARRAY_BUFFER, @vertices_buffer_size, data, GL_STATIC_DRAW) + glBufferData(GL_ARRAY_BUFFER, @vertices_buffer_size, data.pack("f*"), GL_STATIC_DRAW) glBindBuffer(GL_ARRAY_BUFFER, 0) end @@ -138,21 +138,23 @@ class IMICFPS glEnableVertexAttribArray(3) glEnableVertexAttribArray(4) + program = Shader.get("default").program + # index, size, type, normalized, stride, pointer # vertices (positions) - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * 3, nil) + glVertexAttribPointer(glGetAttribLocation(program, "inPosition"), 3, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * 3, nil) handleGlError # colors - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (3 + 3), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inColor"), 3, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (3 + 3), nil) handleGlError # normals - glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (4 + 3 + 3), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inNormal"), 4, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (4 + 3 + 3), nil) handleGlError # uvs - glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (3 + 4 + 3 + 3), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inUV"), 4, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT * (3 + 4 + 3 + 3), nil) handleGlError # texture ids - glVertexAttribPointer(4, 1, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT + (Fiddle::SIZEOF_FLOAT * (3 + 4 + 3 + 3)), nil) + glVertexAttribPointer(glGetAttribLocation(program, "inTextureID"), 1, GL_FLOAT, GL_FALSE, Fiddle::SIZEOF_FLOAT + (Fiddle::SIZEOF_FLOAT * (3 + 4 + 3 + 3)), nil) handleGlError glDisableVertexAttribArray(4) diff --git a/shaders/fragment/default.glsl b/shaders/fragment/default.glsl index f6627bc..27cda02 100644 --- a/shaders/fragment/default.glsl +++ b/shaders/fragment/default.glsl @@ -5,6 +5,11 @@ in vec4 outNormal; in vec3 outUV; in float outTextureID; +// optimizing compilers are annoying at this stage of my understanding of GLSL +vec4 lokiVar; + void main() { - gl_FragColor = vec4(outColor, 1.0); + lokiVar = vec4(outColor, 1.0) + outNormal + vec4(outUV, 1.0) + vec4(outTextureID, 1.0, 1.0, 1.0); + lokiVar = normalize(lokiVar); + gl_FragColor = vec4(lokiVar); } \ No newline at end of file