Merge remote-tracking branch 'refs/remotes/raysan5/develop' into develop
This commit is contained in:
commit
26833f5aae
9 changed files with 124 additions and 51 deletions
32
CMakeLists.txt
Normal file
32
CMakeLists.txt
Normal file
|
@ -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/)
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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};
|
||||||
|
|
38
src/core.c
38
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
|
||||||
|
|
34
src/raylib.h
34
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 vertexLoc; // Vertex attribute location point (default-location = 0)
|
||||||
int texcoordLoc; // Texcoord attribute location point (default-location = 1)
|
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 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
|
// Texture map locations (generic for any kind of map)
|
||||||
int mapDiffuseLoc; // Diffuse map texture uniform location point (fragment shader)
|
int mapTexture0Loc; // Map texture uniform location point (default-texture-unit = 0)
|
||||||
int mapNormalLoc; // Normal map texture uniform location point (fragment shader)
|
int mapTexture1Loc; // Map texture uniform location point (default-texture-unit = 1)
|
||||||
int mapSpecularLoc; // Specular map texture uniform location point (fragment shader)
|
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 texDiffuse; // Diffuse texture (binded to shader mapTexture0Loc)
|
||||||
Texture2D texNormal; // Normal texture
|
Texture2D texNormal; // Normal texture (binded to shader mapTexture1Loc)
|
||||||
Texture2D texSpecular; // Specular texture
|
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
|
Color diffuse; // Light color
|
||||||
float intensity;
|
float intensity; // Light intensity level
|
||||||
|
|
||||||
float coneAngle; // Spot light max angle
|
float coneAngle; // Spot light max angle
|
||||||
} LightData, *Light;
|
} LightData, *Light;
|
||||||
|
|
40
src/rlgl.c
40
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->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->texcoord2Loc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TEXCOORD2_NAME);
|
shader->texcoord2Loc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TEXCOORD2_NAME);
|
||||||
|
shader->normalLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_NORMAL_NAME);
|
||||||
|
shader->tangentLoc = glGetAttribLocation(shader->id, DEFAULT_ATTRIB_TANGENT_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->mapTexture0Loc = glGetUniformLocation(shader->id, "texture0");
|
||||||
shader->mapNormalLoc = glGetUniformLocation(shader->id, "texture1");
|
shader->mapTexture1Loc = glGetUniformLocation(shader->id, "texture1");
|
||||||
shader->mapSpecularLoc = glGetUniformLocation(shader->id, "texture2");
|
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
|
||||||
|
|
|
@ -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
|
// Texture map locations (generic for any kind of map)
|
||||||
int mapDiffuseLoc; // Diffuse map texture uniform location point (fragment shader)
|
int mapTexture0Loc; // Map texture uniform location point (default-texture-unit = 0)
|
||||||
int mapNormalLoc; // Normal map texture uniform location point (fragment shader)
|
int mapTexture1Loc; // Map texture uniform location point (default-texture-unit = 1)
|
||||||
int mapSpecularLoc; // Specular map texture uniform location point (fragment shader)
|
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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
set PATH=C:\raylib\MinGW\bin;%PATH%
|
|
||||||
mingw32-make
|
|
Loading…
Add table
Add a link
Reference in a new issue