'fixed' glGetAttribLocation crashes (shader compiler likes to agressively optimize)

This commit is contained in:
2019-08-11 21:46:18 -05:00
parent f11b091fe0
commit d07130b03b
3 changed files with 21 additions and 14 deletions

View File

@@ -10,13 +10,13 @@ class IMICFPS
@dummy_entity = nil @dummy_entity = nil
@assets = [] @assets = []
@asset_index = 0 @asset_index = 0
add_asset(:shader, nil, "default")
add_asset(:model, "base", "river_terrain") add_asset(:model, "base", "river_terrain")
add_asset(:model, "base", "skydome") add_asset(:model, "base", "skydome")
add_asset(:model, "base", "tree") add_asset(:model, "base", "tree")
add_asset(:model, "base", "biped") add_asset(:model, "base", "biped")
add_asset(:shader, nil, "default")
@act = false @act = false
@cycled = false @cycled = false

View File

@@ -94,13 +94,13 @@ class IMICFPS
tex_ids = [] tex_ids = []
@faces.each do |face| @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] } colors << face.colors.map { |vert| [vert.x, vert.y, vert.z] }
norms << face.normals.map { |vert| [vert.x, vert.y, vert.z, vert.weight] } norms << face.normals.map { |vert| [vert.x, vert.y, vert.z, vert.weight] }
if model_has_texture if model_has_texture
uvs << face.uvs.map { |vert| [vert.x, vert.y, vert.z] } uvs << face.uvs.map { |vert| [vert.x, vert.y, vert.z] }
tex_ids << face.material.texture_id ? face.material.texture_id : -1 tex_ids << face.material.texture_id ? face.material.texture_id.to_f : -1.0
end end
end end
@@ -117,14 +117,14 @@ class IMICFPS
data_size += Fiddle::SIZEOF_FLOAT * 3 * colors.size data_size += Fiddle::SIZEOF_FLOAT * 3 * colors.size
data_size += Fiddle::SIZEOF_FLOAT * 4 * norms.size data_size += Fiddle::SIZEOF_FLOAT * 4 * norms.size
data_size += Fiddle::SIZEOF_FLOAT * 3 * uvs.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 @vertices_buffer_size = data_size
data = @vertices_buffer_data.flatten.pack("f*") data = @vertices_buffer_data.flatten
glBindBuffer(GL_ARRAY_BUFFER, @vertices_buffer_id) 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) glBindBuffer(GL_ARRAY_BUFFER, 0)
end end
@@ -138,21 +138,23 @@ class IMICFPS
glEnableVertexAttribArray(3) glEnableVertexAttribArray(3)
glEnableVertexAttribArray(4) glEnableVertexAttribArray(4)
program = Shader.get("default").program
# index, size, type, normalized, stride, pointer # index, size, type, normalized, stride, pointer
# vertices (positions) # 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 handleGlError
# colors # 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 handleGlError
# normals # 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 handleGlError
# uvs # 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 handleGlError
# texture ids # 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 handleGlError
glDisableVertexAttribArray(4) glDisableVertexAttribArray(4)

View File

@@ -5,6 +5,11 @@ in vec4 outNormal;
in vec3 outUV; in vec3 outUV;
in float outTextureID; in float outTextureID;
// optimizing compilers are annoying at this stage of my understanding of GLSL
vec4 lokiVar;
void main() { 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);
} }