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 |     // Send vertex attributes to fragment shader | ||||||
|     fragPosition = vec3(instanceTransform*vec4(vertexPosition, 1.0)); |     fragPosition = vec3(instanceTransform*vec4(vertexPosition, 1.0)); | ||||||
|     fragTexCoord = vertexTexCoord; |     fragTexCoord = vertexTexCoord; | ||||||
|     //fragColor = vertexColor; |     fragColor = vec4(1.0); | ||||||
|     fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0))); |     fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0))); | ||||||
|  |  | ||||||
|     // Calculate final vertex position, note that we multiply mvp by instanceTransform |     // 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)); |         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) }); |         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); |         Matrix rotation = MatrixRotate(axis, angle); | ||||||
|          |          | ||||||
|         transforms[i] = MatrixMultiply(rotation, translation); |         transforms[i] = MatrixMultiply(rotation, translation); | ||||||
| @@ -73,7 +73,6 @@ int main(void) | |||||||
|     // Get shader locations |     // Get shader locations | ||||||
|     shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp"); |     shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp"); | ||||||
|     shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos"); |     shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos"); | ||||||
|     shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instanceTransform"); |  | ||||||
|  |  | ||||||
|     // Set shader value: ambient light level |     // Set shader value: ambient light level | ||||||
|     int ambientLoc = GetShaderLocation(shader, "ambient"); |     int ambientLoc = GetShaderLocation(shader, "ambient"); | ||||||
|   | |||||||
| @@ -151,6 +151,8 @@ | |||||||
|     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS     7 |     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS     7 | ||||||
|     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 |     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 | ||||||
| #endif | #endif | ||||||
|  | #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX 9 | ||||||
|  |  | ||||||
|  |  | ||||||
| // Default shader vertex attribute names to set location points | // 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 | // 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_MAP_BRDF,            // Shader location: sampler2d texture: brdf | ||||||
|     SHADER_LOC_VERTEX_BONEIDS,      // Shader location: vertex attribute: boneIds |     SHADER_LOC_VERTEX_BONEIDS,      // Shader location: vertex attribute: boneIds | ||||||
|     SHADER_LOC_VERTEX_BONEWEIGHTS,  // Shader location: vertex attribute: boneWeights |     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; | } ShaderLocationIndex; | ||||||
|  |  | ||||||
| #define SHADER_LOC_MAP_DIFFUSE      SHADER_LOC_MAP_ALBEDO | #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_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_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_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) |         // Get handles to GLSL uniform locations (vertex shader) | ||||||
|         shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_MVP); |         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 |     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8 | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  | #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX | ||||||
|  |     #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCE_TX 9 | ||||||
|  | #endif | ||||||
|  |  | ||||||
| //---------------------------------------------------------------------------------- | //---------------------------------------------------------------------------------- | ||||||
| // Types and Structures Definition | // Types and Structures Definition | ||||||
| @@ -998,6 +1001,9 @@ RLAPI void rlLoadDrawQuad(void);     // Load and draw a quad | |||||||
| #ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS | #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 |     #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS  "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS | ||||||
| #endif | #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 | #ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_MVP | ||||||
|     #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP         "mvp"               // model-view-projection matrix |     #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_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_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_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 | #ifdef RL_SUPPORT_MESH_GPU_SKINNING | ||||||
|     glBindAttribLocation(program, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS); |     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 |     // no faster, since we're transferring all the transform matrices anyway | ||||||
|     instancesVboId = rlLoadVertexBuffer(instanceTransforms, instances*sizeof(float16), false); |     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++) |     for (unsigned int i = 0; i < 4; i++) | ||||||
|     { |     { | ||||||
|         rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_MATRIX_MODEL] + i); |         rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i); | ||||||
|         rlSetVertexAttribute(material.shader.locs[SHADER_LOC_MATRIX_MODEL] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4)); |         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_MATRIX_MODEL] + i, 1); |         rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_VERTEX_INSTANCE_TX] + i, 1); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     rlDisableVertexBuffer(); |     rlDisableVertexBuffer(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Michael
					Michael