mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-10-26 12:27:01 +00:00 
			
		
		
		
	This commit is contained in:
		| @@ -25,7 +25,7 @@ void main() | ||||
|     // Send vertex attributes to fragment shader | ||||
|     fragPosition = vec3(instanceTransform*vec4(vertexPosition, 1.0)); | ||||
|     fragTexCoord = vertexTexCoord; | ||||
|     //fragColor = vertexColor; | ||||
|     fragColor = vec4(1.0); | ||||
|     fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0))); | ||||
|  | ||||
|     // Calculate final vertex position, note that we multiply mvp by instanceTransform | ||||
|   | ||||
| @@ -61,7 +61,7 @@ int main(void) | ||||
|     { | ||||
|         Matrix translation = MatrixTranslate((float)GetRandomValue(-50, 50), (float)GetRandomValue(-50, 50), (float)GetRandomValue(-50, 50)); | ||||
|         Vector3 axis = Vector3Normalize((Vector3){ (float)GetRandomValue(0, 360), (float)GetRandomValue(0, 360), (float)GetRandomValue(0, 360) }); | ||||
|         float angle = (float)GetRandomValue(0, 10)*DEG2RAD; | ||||
|         float angle = (float)GetRandomValue(0, 180)*DEG2RAD; | ||||
|         Matrix rotation = MatrixRotate(axis, angle); | ||||
|          | ||||
|         transforms[i] = MatrixMultiply(rotation, translation); | ||||
| @@ -73,7 +73,6 @@ int main(void) | ||||
|     // Get shader locations | ||||
|     shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp"); | ||||
|     shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos"); | ||||
|     shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instanceTransform"); | ||||
|  | ||||
|     // Set shader value: ambient light level | ||||
|     int ambientLoc = GetShaderLocation(shader, "ambient"); | ||||
|   | ||||
| @@ -151,6 +151,8 @@ | ||||
|     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS     7 | ||||
|     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 | ||||
| #endif | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX 9 | ||||
|  | ||||
|  | ||||
| // Default shader vertex attribute names to set location points | ||||
| // NOTE: When a new shader is loaded, the following locations are tried to be set for convenience | ||||
|   | ||||
| @@ -801,7 +801,8 @@ typedef enum { | ||||
|     SHADER_LOC_MAP_BRDF,            // Shader location: sampler2d texture: brdf | ||||
|     SHADER_LOC_VERTEX_BONEIDS,      // Shader location: vertex attribute: boneIds | ||||
|     SHADER_LOC_VERTEX_BONEWEIGHTS,  // Shader location: vertex attribute: boneWeights | ||||
|     SHADER_LOC_BONE_MATRICES        // Shader location: array of matrices uniform: boneMatrices | ||||
|     SHADER_LOC_BONE_MATRICES,       // Shader location: array of matrices uniform: boneMatrices | ||||
|     SHADER_LOC_VERTEX_INSTANCE_TX   // Shader location: vertex attribute: instanceTransform | ||||
| } ShaderLocationIndex; | ||||
|  | ||||
| #define SHADER_LOC_MAP_DIFFUSE      SHADER_LOC_MAP_ALBEDO | ||||
|   | ||||
| @@ -1346,6 +1346,7 @@ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode) | ||||
|         shader.locs[SHADER_LOC_VERTEX_COLOR] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR); | ||||
|         shader.locs[SHADER_LOC_VERTEX_BONEIDS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS); | ||||
|         shader.locs[SHADER_LOC_VERTEX_BONEWEIGHTS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS); | ||||
|         shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX); | ||||
|  | ||||
|         // Get handles to GLSL uniform locations (vertex shader) | ||||
|         shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_MVP); | ||||
|   | ||||
| @@ -355,6 +355,9 @@ | ||||
|     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 | ||||
| #endif | ||||
| #endif | ||||
| #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX | ||||
|     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX 9 | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Types and Structures Definition | ||||
| @@ -998,6 +1001,9 @@ RLAPI void rlLoadDrawQuad(void);     // Load and draw a quad | ||||
| #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS | ||||
|     #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS  "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS | ||||
| #endif | ||||
| #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX | ||||
|     #define RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX  "instanceTransform" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX | ||||
| #endif | ||||
|  | ||||
| #ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_MVP | ||||
|     #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP         "mvp"               // model-view-projection matrix | ||||
| @@ -4216,6 +4222,7 @@ unsigned int rlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId) | ||||
|     glBindAttribLocation(program, RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR, RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR); | ||||
|     glBindAttribLocation(program, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT, RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT); | ||||
|     glBindAttribLocation(program, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2, RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2); | ||||
|     glBindAttribLocation(program, RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCE_TX); | ||||
|  | ||||
| #ifdef RL_SUPPORT_MESH_GPU_SKINNING | ||||
|     glBindAttribLocation(program, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS); | ||||
|   | ||||
| @@ -1734,12 +1734,12 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i | ||||
|     // no faster, since we're transferring all the transform matrices anyway | ||||
|     instancesVboId = rlLoadVertexBuffer(instanceTransforms, instances*sizeof(float16), false); | ||||
|  | ||||
|     // Instances transformation matrices are send to shader attribute location: SHADER_LOC_MATRIX_MODEL | ||||
|     // Instances transformation matrices are sent to shader attribute location: SHADER_LOC_VERTEX_INSTANCE_TX | ||||
|     for (unsigned int i = 0; i < 4; i++) | ||||
|     { | ||||
|         rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_MATRIX_MODEL] + i); | ||||
|         rlSetVertexAttribute(material.shader.locs[SHADER_LOC_MATRIX_MODEL] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4)); | ||||
|         rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_MATRIX_MODEL] + i, 1); | ||||
|         rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i); | ||||
|         rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4)); | ||||
|         rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i, 1); | ||||
|     } | ||||
|  | ||||
|     rlDisableVertexBuffer(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael
					Michael