aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoshua Reisenauer <kd7tck@msn.com>2016-05-01 20:00:51 -0700
committerJoshua Reisenauer <kd7tck@msn.com>2016-05-01 20:00:51 -0700
commit289a53221d1c0e51247d09cee0708a1ea9ec32c5 (patch)
tree9180334f7cbc4a053f657a49da9180f4d3f873bb /src
parenta2a3d3aeb60dd117b02fc8c7c85ec428175a5f83 (diff)
parent17732fa9c493bffb8e05cb5db45d998d2b151cb9 (diff)
downloadraylib-289a53221d1c0e51247d09cee0708a1ea9ec32c5.tar.gz
raylib-289a53221d1c0e51247d09cee0708a1ea9ec32c5.zip
merge fix
Diffstat (limited to 'src')
-rw-r--r--src/core.c44
-rw-r--r--src/raylib.h24
-rw-r--r--src/rlgl.c14
3 files changed, 43 insertions, 39 deletions
diff --git a/src/core.c b/src/core.c
index 7b1d5960..dd904692 100644
--- a/src/core.c
+++ b/src/core.c
@@ -524,23 +524,6 @@ void BeginDrawing(void)
// NOTE: Not required with OpenGL 3.3+
}
-// Setup drawing canvas with 2d camera
-void BeginDrawingEx(Camera2D camera)
-{
- BeginDrawing();
-
- // Camera rotation and scaling is always relative to target
- Matrix matOrigin = MatrixTranslate(-camera.target.x, -camera.target.y, 0.0f);
- Matrix matRotation = MatrixRotate((Vector3){ 0.0f, 0.0f, 1.0f }, camera.rotation*DEG2RAD);
- Matrix matScale = MatrixScale(camera.zoom, camera.zoom, 1.0f);
-
- Matrix matTranslation = MatrixTranslate(camera.offset.x + camera.target.x, camera.offset.y + camera.target.y, 0.0f);
-
- Matrix matTransform = MatrixMultiply(MatrixMultiply(matOrigin, MatrixMultiply(matScale, matRotation)), matTranslation);
-
- rlMultMatrixf(MatrixToFloat(matTransform));
-}
-
// End canvas drawing and Swap Buffers (Double Buffering)
void EndDrawing(void)
{
@@ -569,6 +552,33 @@ void EndDrawing(void)
}
}
+// Initialize 2D mode with custom camera
+void Begin2dMode(Camera2D camera)
+{
+ rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
+
+ rlLoadIdentity(); // Reset current matrix (MODELVIEW)
+
+ // Camera rotation and scaling is always relative to target
+ Matrix matOrigin = MatrixTranslate(-camera.target.x, -camera.target.y, 0.0f);
+ Matrix matRotation = MatrixRotate((Vector3){ 0.0f, 0.0f, 1.0f }, camera.rotation*DEG2RAD);
+ Matrix matScale = MatrixScale(camera.zoom, camera.zoom, 1.0f);
+
+ Matrix matTranslation = MatrixTranslate(camera.offset.x + camera.target.x, camera.offset.y + camera.target.y, 0.0f);
+
+ Matrix matTransform = MatrixMultiply(MatrixMultiply(matOrigin, MatrixMultiply(matScale, matRotation)), matTranslation);
+
+ rlMultMatrixf(MatrixToFloat(matTransform));
+}
+
+// Ends 2D mode custom camera usage
+void End2dMode(void)
+{
+ rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
+
+ rlLoadIdentity(); // Reset current matrix (MODELVIEW)
+}
+
// Initializes 3D mode for drawing (Camera setup)
void Begin3dMode(Camera camera)
{
diff --git a/src/raylib.h b/src/raylib.h
index f4ea875e..ade581d3 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -355,7 +355,7 @@ typedef struct Camera {
// Camera2D type, defines a 2d camera
typedef struct Camera2D {
Vector2 offset; // Camera offset (displacement from target)
- Vector2 target; // Camera target (for rotation and zoom)
+ Vector2 target; // Camera target (rotation and zoom origin)
float rotation; // Camera rotation in degrees
float zoom; // Camera zoom (scaling), should be 1.0f by default
} Camera2D;
@@ -386,16 +386,17 @@ typedef struct Mesh {
typedef struct Shader {
unsigned int id; // Shader program id
- // Variable attributes
+ // Variable attributes locations
int vertexLoc; // Vertex attribute location point (vertex shader)
int texcoordLoc; // Texcoord attribute location point (vertex shader)
int normalLoc; // Normal attribute location point (vertex shader)
int colorLoc; // Color attibute location point (vertex shader)
- // Uniforms
+ // Uniform locations
int mvpLoc; // ModelView-Projection matrix uniform location point (vertex shader)
int tintColorLoc; // Color uniform location point (fragment shader)
+ // Texture map locations
int mapDiffuseLoc; // Diffuse map texture uniform location point (fragment shader)
int mapNormalLoc; // Normal map texture uniform location point (fragment shader)
int mapSpecularLoc; // Specular map texture uniform location point (fragment shader)
@@ -575,9 +576,10 @@ void DisableCursor(void); // Disables cursor
void ClearBackground(Color color); // Sets Background Color
void BeginDrawing(void); // Setup drawing canvas to start drawing
-void BeginDrawingEx(Camera2D camera); // Setup drawing canvas with 2d camera
void EndDrawing(void); // End canvas drawing and Swap Buffers (Double Buffering)
+void Begin2dMode(Camera2D camera); // Initialize 2D mode with custom camera
+void End2dMode(void); // Ends 2D mode custom camera usage
void Begin3dMode(Camera camera); // Initializes 3D mode for drawing (Camera setup)
void End3dMode(void); // Ends 3D mode and returns to default 2D orthographic mode
void BeginTextureMode(RenderTexture2D target); // Initializes render texture for drawing
@@ -832,18 +834,14 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p
Shader LoadShader(char *vsFileName, char *fsFileName); // Load a custom shader and bind default locations
unsigned int LoadShaderProgram(char *vShaderStr, char *fShaderStr); // Load custom shaders strings and return program id
void UnloadShader(Shader shader); // Unload a custom shader from memory
-void SetCustomShader(Shader shader); // Set custom shader to be used in batch draw
void SetDefaultShader(void); // Set default shader to be used in batch draw
+void SetCustomShader(Shader shader); // Set custom shader to be used in batch draw
void SetModelShader(Model *model, Shader shader); // Link a shader to a model
-int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location
-void SetShaderValue(Shader shader, int uniformLoc, float *value, int size); // Set shader uniform value (float)
-void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size); // Set shader uniform value (int)
-void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4)
-//void SetShaderMapDiffuse(Shader *shader, Texture2D texture); // Default diffuse shader map texture assignment
-//void SetShaderMapNormal(Shader *shader, const char *uniformName, Texture2D texture); // Normal map texture shader assignment
-//void SetShaderMapSpecular(Shader *shader, const char *uniformName, Texture2D texture); // Specular map texture shader assignment
-//void SetShaderMap(Shader *shader, int mapLocation, Texture2D texture, int textureUnit); // TODO: Generic shader map assignment
+int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location
+void SetShaderValue(Shader shader, int uniformLoc, float *value, int size); // Set shader uniform value (float)
+void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size); // Set shader uniform value (int)
+void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4)
void SetBlendMode(int mode); // Set blending mode (alpha, additive, multiplied)
diff --git a/src/rlgl.c b/src/rlgl.c
index 5b181a86..b1b020ec 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -1350,14 +1350,14 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro
glBindTexture(GL_TEXTURE_2D, model.material.texDiffuse.id);
glUniform1i(model.material.shader.mapDiffuseLoc, 0); // Texture fits in active texture unit 0
- if (model.material.texNormal.id != 0)
+ if ((model.material.texNormal.id != 0) && (model.material.shader.mapNormalLoc != -1))
{
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, model.material.texNormal.id);
glUniform1i(model.material.shader.mapNormalLoc, 1); // Texture fits in active texture unit 1
}
- if (model.material.texSpecular.id != 0)
+ if ((model.material.texSpecular.id != 0) && (model.material.shader.mapSpecularLoc != -1))
{
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, model.material.texSpecular.id);
@@ -2125,17 +2125,13 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
// After shader loading, we try to load default location names
if (shader.id != 0) LoadDefaultShaderLocations(&shader);
- else
- {
- TraceLog(WARNING, "Custom shader could not be loaded");
- shader = defaultShader;
- }
// Shader strings must be freed
free(vShaderStr);
free(fShaderStr);
}
- else
+
+ if (shader.id == 0)
{
TraceLog(WARNING, "Custom shader could not be loaded");
shader = defaultShader;
@@ -2494,7 +2490,7 @@ static Shader LoadDefaultShader(void)
if (shader.id != 0) TraceLog(INFO, "[SHDR ID %i] Default shader loaded successfully", shader.id);
else TraceLog(WARNING, "[SHDR ID %i] Default shader could not be loaded", shader.id);
- LoadDefaultShaderLocations(&shader);
+ if (shader.id != 0) LoadDefaultShaderLocations(&shader);
return shader;
}