浏览代码

Merge remote-tracking branch 'refs/remotes/raysan5/develop' into develop

victorfisac 9 年之前
父节点
当前提交
26833f5aae
共有 9 个文件被更改,包括 122 次插入49 次删除
  1. 32 0
      CMakeLists.txt
  2. 2 0
      examples/shaders_custom_uniform.c
  3. 5 6
      examples/shaders_standard_lighting.c
  4. 31 5
      src/core.c
  5. 17 17
      src/raylib.h
  6. 27 11
      src/rlgl.c
  7. 5 4
      src/rlgl.h
  8. 3 4
      src/textures.c
  9. 0 2
      src/windows_compile.bat

+ 32 - 0
CMakeLists.txt

@@ -0,0 +1,32 @@
+cmake_minimum_required (VERSION 3.0)
+project (raylib)
+SET(PLATFORM_TO_USE "PLATFORM_DESKTOP" CACHE STRING "Platform to compile for")
+SET_PROPERTY(CACHE PLATFORM_TO_USE PROPERTY STRINGS PLATFORM_DESKTOP PLATFORM_RPI PLATFORM_WEB)
+
+set(CMAKE_C_FLAGS "-O1 -Wall -std=gnu99 -fgnu89-inline")
+
+IF(${PLATFORM_TO_USE} MATCHES "PLATFORM_DESKTOP")
+
+     add_definitions(-DPLATFORM_DESKTOP, -DGRAPHICS_API_OPENGL_33)
+     include_directories("." "src/" "external/openal_soft/include" "external/glew/include" "external/glfw3/include")
+
+ENDIF()
+
+IF(${PLATFORM_TO_USE} MATCHES "PLATFORM_RPI")
+
+     add_definitions(-DPLATFORM_RPI, -GRAPHICS_API_OPENGL_ES2)
+     include_directories("." "/opt/vc/include" "/opt/vc/include/interface/vmcs_host/linux" "/opt/vc/include/interface/vcos/pthreads")
+
+ENDIF()
+
+IF(${PLATFORM_TO_USE} MATCHES "PLATFORM_WEB")
+
+     add_definitions(-DPLATFORM_WEB, -GRAPHICS_API_OPENGL_ES2)
+     include_directories("." "src/" "external/openal_soft/include" "external/glew/include" "external/glfw3/include")
+
+ENDIF()
+
+
+file(GLOB SOURCES "src/*.c")
+add_library(raylib STATIC ${SOURCES})
+install(TARGETS raylib DESTINATION lib/)

+ 2 - 0
examples/shaders_custom_uniform.c

@@ -89,6 +89,8 @@ int main()
                     DrawGrid(10, 1.0f);     // Draw a grid
                     DrawGrid(10, 1.0f);     // Draw a grid
 
 
                 End3dMode();
                 End3dMode();
+                
+                DrawText("TEXT DRAWN IN RENDER TEXTURE", 200, 10, 30, RED);
             
             
             EndTextureMode();           // End drawing to texture (now we have a texture available for next passes)
             EndTextureMode();           // End drawing to texture (now we have a texture available for next passes)
             
             

+ 5 - 6
examples/shaders_standard_lighting.c

@@ -17,7 +17,6 @@
 ********************************************************************************************/
 ********************************************************************************************/
 
 
 #include "raylib.h"
 #include "raylib.h"
-#include "raymath.h"
 
 
 int main()
 int main()
 {
 {
@@ -35,27 +34,27 @@ int main()
     Vector3 position = { 0.0f, 0.0f, 0.0f };   // Set model position
     Vector3 position = { 0.0f, 0.0f, 0.0f };   // Set model position
     
     
     Model dwarf = LoadModel("resources/model/dwarf.obj");                   // Load OBJ model
     Model dwarf = LoadModel("resources/model/dwarf.obj");                   // Load OBJ model
-    Texture2D texDiffuse = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model diffuse texture
 
 
     Material material = LoadStandardMaterial();
     Material material = LoadStandardMaterial();
-    material.texDiffuse = texDiffuse;
+    material.texDiffuse = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model diffuse texture
     material.colDiffuse = (Color){255, 255, 255, 255};
     material.colDiffuse = (Color){255, 255, 255, 255};
     material.colAmbient = (Color){0, 0, 10, 255};
     material.colAmbient = (Color){0, 0, 10, 255};
     material.colSpecular = (Color){255, 255, 255, 255};
     material.colSpecular = (Color){255, 255, 255, 255};
     material.glossiness = 50.0f;
     material.glossiness = 50.0f;
-    dwarf.material = material;      // Apply material to model
     
     
+    dwarf.material = material;      // Apply material to model
+
     Light spotLight = CreateLight(LIGHT_SPOT, (Vector3){3.0f, 5.0f, 2.0f}, (Color){255, 255, 255, 255});
     Light spotLight = CreateLight(LIGHT_SPOT, (Vector3){3.0f, 5.0f, 2.0f}, (Color){255, 255, 255, 255});
     spotLight->target = (Vector3){0.0f, 0.0f, 0.0f};
     spotLight->target = (Vector3){0.0f, 0.0f, 0.0f};
     spotLight->intensity = 2.0f;
     spotLight->intensity = 2.0f;
     spotLight->diffuse = (Color){255, 100, 100, 255};
     spotLight->diffuse = (Color){255, 100, 100, 255};
     spotLight->coneAngle = 60.0f;
     spotLight->coneAngle = 60.0f;
-    
+
     Light dirLight = CreateLight(LIGHT_DIRECTIONAL, (Vector3){0.0f, -3.0f, -3.0f}, (Color){255, 255, 255, 255});
     Light dirLight = CreateLight(LIGHT_DIRECTIONAL, (Vector3){0.0f, -3.0f, -3.0f}, (Color){255, 255, 255, 255});
     dirLight->target = (Vector3){1.0f, -2.0f, -2.0f};
     dirLight->target = (Vector3){1.0f, -2.0f, -2.0f};
     dirLight->intensity = 2.0f;
     dirLight->intensity = 2.0f;
     dirLight->diffuse = (Color){100, 255, 100, 255};
     dirLight->diffuse = (Color){100, 255, 100, 255};
-    
+
     Light pointLight = CreateLight(LIGHT_POINT, (Vector3){0.0f, 4.0f, 5.0f}, (Color){255, 255, 255, 255});
     Light pointLight = CreateLight(LIGHT_POINT, (Vector3){0.0f, 4.0f, 5.0f}, (Color){255, 255, 255, 255});
     pointLight->intensity = 2.0f;
     pointLight->intensity = 2.0f;
     pointLight->diffuse = (Color){100, 100, 255, 255};
     pointLight->diffuse = (Color){100, 100, 255, 255};

+ 31 - 5
src/core.c

@@ -562,9 +562,8 @@ void Begin2dMode(Camera2D camera)
     Matrix matOrigin = MatrixTranslate(-camera.target.x, -camera.target.y, 0.0f);
     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 matRotation = MatrixRotate((Vector3){ 0.0f, 0.0f, 1.0f }, camera.rotation*DEG2RAD);
     Matrix matScale = MatrixScale(camera.zoom, camera.zoom, 1.0f);
     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 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);
     Matrix matTransform = MatrixMultiply(MatrixMultiply(matOrigin, MatrixMultiply(matScale, matRotation)), matTranslation);
     
     
     rlMultMatrixf(MatrixToFloat(matTransform));
     rlMultMatrixf(MatrixToFloat(matTransform));
@@ -627,11 +626,24 @@ void BeginTextureMode(RenderTexture2D target)
 {
 {
     rlglDraw();                         // Draw Buffers (Only OpenGL 3+ and ES2)
     rlglDraw();                         // Draw Buffers (Only OpenGL 3+ and ES2)
 
 
-    rlEnableRenderTexture(target.id);
-    
+    rlEnableRenderTexture(target.id);   // Enable render target
+
     rlClearScreenBuffers();             // Clear render texture buffers
     rlClearScreenBuffers();             // Clear render texture buffers
+    
+    // Set viewport to framebuffer size
+    rlViewport(0, 0, target.texture.width, target.texture.height); 
+    
+    rlMatrixMode(RL_PROJECTION);        // Switch to PROJECTION matrix
+    rlLoadIdentity();                   // Reset current matrix (PROJECTION)
 
 
+    // Set orthographic projection to current framebuffer size
+    // NOTE: Configured top-left corner as (0, 0)
+    rlOrtho(0, target.texture.width, target.texture.height, 0, 0.0f, 1.0f);        
+
+    rlMatrixMode(RL_MODELVIEW);         // Switch back to MODELVIEW matrix
     rlLoadIdentity();                   // Reset current matrix (MODELVIEW)
     rlLoadIdentity();                   // Reset current matrix (MODELVIEW)
+
+    //rlScalef(0.0f, -1.0f, 0.0f);      // Flip Y-drawing (?)
 }
 }
 
 
 // Ends drawing to render texture
 // Ends drawing to render texture
@@ -639,7 +651,21 @@ void EndTextureMode(void)
 {
 {
     rlglDraw();                         // Draw Buffers (Only OpenGL 3+ and ES2)
     rlglDraw();                         // Draw Buffers (Only OpenGL 3+ and ES2)
 
 
-    rlDisableRenderTexture();
+    rlDisableRenderTexture();           // Disable render target
+
+    // Set viewport to default framebuffer size (screen size)
+    // TODO: consider possible viewport offsets
+    rlViewport(0, 0, GetScreenWidth(), GetScreenHeight());
+    
+    rlMatrixMode(RL_PROJECTION);        // Switch to PROJECTION matrix
+    rlLoadIdentity();                   // Reset current matrix (PROJECTION)
+    
+    // Set orthographic projection to current framebuffer size
+    // NOTE: Configured top-left corner as (0, 0)
+    rlOrtho(0, GetScreenWidth(), GetScreenHeight(), 0, 0.0f, 1.0f);
+
+    rlMatrixMode(RL_MODELVIEW);         // Switch back to MODELVIEW matrix
+    rlLoadIdentity();                   // Reset current matrix (MODELVIEW)
 }
 }
 
 
 // Set target FPS for the game
 // Set target FPS for the game

+ 17 - 17
src/raylib.h

@@ -369,6 +369,7 @@ typedef struct BoundingBox {
 // Vertex data definning a mesh
 // Vertex data definning a mesh
 typedef struct Mesh {
 typedef struct Mesh {
     int vertexCount;            // number of vertices stored in arrays
     int vertexCount;            // number of vertices stored in arrays
+    int triangleCount;          // number of triangles stored (indexed or not)
     float *vertices;            // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
     float *vertices;            // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
     float *texcoords;           // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
     float *texcoords;           // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
     float *texcoords2;          // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
     float *texcoords2;          // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
@@ -376,8 +377,7 @@ typedef struct Mesh {
     float *tangents;            // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
     float *tangents;            // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
     unsigned char *colors;      // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
     unsigned char *colors;      // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
     unsigned short *indices;    // vertex indices (in case vertex data comes indexed)
     unsigned short *indices;    // vertex indices (in case vertex data comes indexed)
-    int triangleCount;          // number of triangles stored (indexed or not)
-    
+
     BoundingBox bounds;         // mesh limits defined by min and max points
     BoundingBox bounds;         // mesh limits defined by min and max points
     
     
     unsigned int vaoId;         // OpenGL Vertex Array Object id
     unsigned int vaoId;         // OpenGL Vertex Array Object id
@@ -389,30 +389,30 @@ typedef struct Shader {
     unsigned int id;      // Shader program id
     unsigned int id;      // Shader program id
     
     
     // Vertex attributes locations (default locations)
     // Vertex attributes locations (default locations)
-    int vertexLoc;        // Vertex attribute location point (default-location = 0)
-    int texcoordLoc;      // Texcoord attribute location point (default-location = 1)
-    int normalLoc;        // Normal attribute location point (default-location = 2)
-    int colorLoc;         // Color attibute location point (default-location = 3)
-    int tangentLoc;       // Tangent attribute location point (default-location = 4)
+    int vertexLoc;        // Vertex attribute location point    (default-location = 0)
+    int texcoordLoc;      // Texcoord attribute location point  (default-location = 1)
     int texcoord2Loc;     // Texcoord2 attribute location point (default-location = 5)
     int texcoord2Loc;     // Texcoord2 attribute location point (default-location = 5)
+    int normalLoc;        // Normal attribute location point    (default-location = 2)
+    int tangentLoc;       // Tangent attribute location point   (default-location = 4)
+    int colorLoc;         // Color attibute location point      (default-location = 3)
 
 
     // Uniform locations
     // Uniform locations
     int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
     int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
     int tintColorLoc;     // Diffuse color uniform location point (fragment shader)
     int tintColorLoc;     // Diffuse 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)
+    // Texture map locations (generic for any kind of map)
+    int mapTexture0Loc;  // Map texture uniform location point (default-texture-unit = 0)
+    int mapTexture1Loc;  // Map texture uniform location point (default-texture-unit = 1)
+    int mapTexture2Loc;  // Map texture uniform location point (default-texture-unit = 2)
 } Shader;
 } Shader;
 
 
 // Material type
 // Material type
 typedef struct Material {
 typedef struct Material {
-    Shader shader;              // Standard shader (supports 3 map types: diffuse, normal, specular)
+    Shader shader;              // Standard shader (supports 3 map textures)
 
 
-    Texture2D texDiffuse;       // Diffuse texture
-    Texture2D texNormal;        // Normal texture
-    Texture2D texSpecular;      // Specular texture
+    Texture2D texDiffuse;       // Diffuse texture  (binded to shader mapTexture0Loc)
+    Texture2D texNormal;        // Normal texture   (binded to shader mapTexture1Loc)
+    Texture2D texSpecular;      // Specular texture (binded to shader mapTexture2Loc)
     
     
     Color colDiffuse;           // Diffuse color
     Color colDiffuse;           // Diffuse color
     Color colAmbient;           // Ambient color
     Color colAmbient;           // Ambient color
@@ -439,8 +439,8 @@ typedef struct LightData {
     Vector3 target;     // Used on LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
     Vector3 target;     // Used on LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
     float attenuation;  // Lost of light intensity with distance (world distance)
     float attenuation;  // Lost of light intensity with distance (world distance)
     
     
-    Color diffuse;      // Use Vector3 diffuse
-    float intensity;
+    Color diffuse;      // Light color
+    float intensity;    // Light intensity level
     
     
     float coneAngle;    // Spot light max angle
     float coneAngle;    // Spot light max angle
 } LightData, *Light;
 } LightData, *Light;

+ 27 - 11
src/rlgl.c

@@ -404,6 +404,12 @@ void rlOrtho(double left, double right, double bottom, double top, double near,
 
 
 #endif
 #endif
 
 
+// Set the viewport area (trasnformation from normalized device coordinates to window coordinates)
+void rlViewport(int x, int y, int width, int height)
+{
+    glViewport(x, y, width, height);
+}
+
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Module Functions Definition - Vertex level operations
 // Module Functions Definition - Vertex level operations
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
@@ -725,17 +731,25 @@ void rlDisableTexture(void)
 #endif
 #endif
 }
 }
 
 
+// Enable rendering to texture (fbo)
 void rlEnableRenderTexture(unsigned int id)
 void rlEnableRenderTexture(unsigned int id)
 {
 {
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     glBindFramebuffer(GL_FRAMEBUFFER, id);
     glBindFramebuffer(GL_FRAMEBUFFER, id);
+
+    //glDisable(GL_CULL_FACE);    // Allow double side drawing for texture flipping
+    //glCullFace(GL_FRONT);
 #endif
 #endif
 }
 }
 
 
+// Disable rendering to texture
 void rlDisableRenderTexture(void)
 void rlDisableRenderTexture(void)
 {
 {
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     glBindFramebuffer(GL_FRAMEBUFFER, 0);
     glBindFramebuffer(GL_FRAMEBUFFER, 0);
+
+    //glEnable(GL_CULL_FACE);
+    //glCullFace(GL_BACK);
 #endif
 #endif
 }
 }
 
 
@@ -1792,23 +1806,23 @@ void rlglDrawMesh(Mesh mesh, Material material, Matrix transform)
     // Set shader textures (diffuse, normal, specular)
     // Set shader textures (diffuse, normal, specular)
     glActiveTexture(GL_TEXTURE0);
     glActiveTexture(GL_TEXTURE0);
     glBindTexture(GL_TEXTURE_2D, material.texDiffuse.id);
     glBindTexture(GL_TEXTURE_2D, material.texDiffuse.id);
-    glUniform1i(material.shader.mapDiffuseLoc, 0);        // Texture fits in active texture unit 0
+    glUniform1i(material.shader.mapTexture0Loc, 0);         // Diffuse texture fits in active texture unit 0
     
     
-    if ((material.texNormal.id != 0) && (material.shader.mapNormalLoc != -1))
+    if ((material.texNormal.id != 0) && (material.shader.mapTexture1Loc != -1))
     {
     {
         glActiveTexture(GL_TEXTURE1);
         glActiveTexture(GL_TEXTURE1);
         glBindTexture(GL_TEXTURE_2D, material.texNormal.id);
         glBindTexture(GL_TEXTURE_2D, material.texNormal.id);
-        glUniform1i(material.shader.mapNormalLoc, 1);     // Texture fits in active texture unit 1
+        glUniform1i(material.shader.mapTexture1Loc, 1);     // Normal texture fits in active texture unit 1
         
         
         // TODO: Upload to shader normalDepth
         // TODO: Upload to shader normalDepth
         //glUniform1f(???, material.normalDepth);
         //glUniform1f(???, material.normalDepth);
     }
     }
     
     
-    if ((material.texSpecular.id != 0) && (material.shader.mapSpecularLoc != -1))
+    if ((material.texSpecular.id != 0) && (material.shader.mapTexture2Loc != -1))
     {
     {
         glActiveTexture(GL_TEXTURE2);
         glActiveTexture(GL_TEXTURE2);
         glBindTexture(GL_TEXTURE_2D, material.texSpecular.id);
         glBindTexture(GL_TEXTURE_2D, material.texSpecular.id);
-        glUniform1i(material.shader.mapSpecularLoc, 2);   // Texture fits in active texture unit 2
+        glUniform1i(material.shader.mapTexture2Loc, 2);    // Specular texture fits in active texture unit 2
     }
     }
 
 
     if (vaoSupported)
     if (vaoSupported)
@@ -2569,19 +2583,19 @@ static void LoadDefaultShaderLocations(Shader *shader)
     // Get handles to GLSL input attibute locations
     // Get handles to GLSL input attibute locations
     shader->vertexLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_POSITION_NAME);
     shader->vertexLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_POSITION_NAME);
     shader->texcoordLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TEXCOORD_NAME);
     shader->texcoordLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TEXCOORD_NAME);
+    shader->texcoord2Loc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TEXCOORD2_NAME);
     shader->normalLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_NORMAL_NAME);
     shader->normalLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_NORMAL_NAME);
-    shader->colorLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_COLOR_NAME);
     shader->tangentLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TANGENT_NAME);
     shader->tangentLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TANGENT_NAME);
-    shader->texcoord2Loc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TEXCOORD2_NAME);
+    shader->colorLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_COLOR_NAME);
 
 
     // Get handles to GLSL uniform locations (vertex shader)
     // Get handles to GLSL uniform locations (vertex shader)
     shader->mvpLoc  = glGetUniformLocation(shader->id, "mvpMatrix");
     shader->mvpLoc  = glGetUniformLocation(shader->id, "mvpMatrix");
 
 
     // Get handles to GLSL uniform locations (fragment shader)
     // Get handles to GLSL uniform locations (fragment shader)
     shader->tintColorLoc = glGetUniformLocation(shader->id, "colDiffuse");
     shader->tintColorLoc = glGetUniformLocation(shader->id, "colDiffuse");
-    shader->mapDiffuseLoc = glGetUniformLocation(shader->id, "texture0");
-    shader->mapNormalLoc = glGetUniformLocation(shader->id, "texture1");
-    shader->mapSpecularLoc = glGetUniformLocation(shader->id, "texture2");
+    shader->mapTexture0Loc = glGetUniformLocation(shader->id, "texture0");
+    shader->mapTexture1Loc = glGetUniformLocation(shader->id, "texture1");
+    shader->mapTexture2Loc = glGetUniformLocation(shader->id, "texture2");
 }
 }
 
 
 // Unload default shader 
 // Unload default shader 
@@ -2864,8 +2878,10 @@ static void DrawDefaultBuffers(void)
         Matrix matMVP = MatrixMultiply(modelview, projection);
         Matrix matMVP = MatrixMultiply(modelview, projection);
 
 
         glUniformMatrix4fv(currentShader.mvpLoc, 1, false, MatrixToFloat(matMVP));
         glUniformMatrix4fv(currentShader.mvpLoc, 1, false, MatrixToFloat(matMVP));
-        glUniform1i(currentShader.mapDiffuseLoc, 0);
         glUniform4f(currentShader.tintColorLoc, 1.0f, 1.0f, 1.0f, 1.0f);
         glUniform4f(currentShader.tintColorLoc, 1.0f, 1.0f, 1.0f, 1.0f);
+        glUniform1i(currentShader.mapTexture0Loc, 0);
+        
+        // NOTE: Additional map textures not considered for default buffers drawing
     }
     }
    
    
     // Draw lines buffers
     // Draw lines buffers

+ 5 - 4
src/rlgl.h

@@ -171,10 +171,10 @@ typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
         int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
         int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
         int tintColorLoc;     // Color uniform location point (fragment 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)
+        // Texture map locations (generic for any kind of map)
+        int mapTexture0Loc;  // Map texture uniform location point (default-texture-unit = 0)
+        int mapTexture1Loc;  // Map texture uniform location point (default-texture-unit = 1)
+        int mapTexture2Loc;  // Map texture uniform location point (default-texture-unit = 2)
     } Shader;
     } Shader;
 
 
     // Texture2D type
     // Texture2D type
@@ -247,6 +247,7 @@ void rlScalef(float x, float y, float z);       // Multiply the current matrix b
 void rlMultMatrixf(float *mat);                 // Multiply the current matrix by another matrix
 void rlMultMatrixf(float *mat);                 // Multiply the current matrix by another matrix
 void rlFrustum(double left, double right, double bottom, double top, double near, double far);
 void rlFrustum(double left, double right, double bottom, double top, double near, double far);
 void rlOrtho(double left, double right, double bottom, double top, double near, double far);
 void rlOrtho(double left, double right, double bottom, double top, double near, double far);
+void rlViewport(int x, int y, int width, int height); // Set the viewport area
 
 
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 // Functions Declaration - Vertex level operations
 // Functions Declaration - Vertex level operations

+ 3 - 4
src/textures.c

@@ -1385,10 +1385,6 @@ void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float sc
 void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint)
 void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint)
 {
 {
     Rectangle destRec = { (int)position.x, (int)position.y, abs(sourceRec.width), abs(sourceRec.height) };
     Rectangle destRec = { (int)position.x, (int)position.y, abs(sourceRec.width), abs(sourceRec.height) };
-    
-    if (sourceRec.width < 0) sourceRec.x -= sourceRec.width;
-    if (sourceRec.height < 0) sourceRec.y -= sourceRec.height;
-    
     Vector2 origin = { 0, 0 };
     Vector2 origin = { 0, 0 };
 
 
     DrawTexturePro(texture, sourceRec, destRec, origin, 0.0f, tint);
     DrawTexturePro(texture, sourceRec, destRec, origin, 0.0f, tint);
@@ -1398,6 +1394,9 @@ void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Co
 // NOTE: origin is relative to destination rectangle size
 // NOTE: origin is relative to destination rectangle size
 void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint)
 void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint)
 {
 {
+    if (sourceRec.width < 0) sourceRec.x -= sourceRec.width;
+    if (sourceRec.height < 0) sourceRec.y -= sourceRec.height;
+    
     rlEnableTexture(texture.id);
     rlEnableTexture(texture.id);
 
 
     rlPushMatrix();
     rlPushMatrix();

+ 0 - 2
src/windows_compile.bat

@@ -1,2 +0,0 @@
-set PATH=C:\raylib\MinGW\bin;%PATH%
-mingw32-make