mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 23:52:35 +00:00
'fixed' glGetAttribLocation crashes (shader compiler likes to agressively optimize)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user