Merge pull request #504 from Martinfx/master
Fix potential bugs from static analysis
This commit is contained in:
commit
3e0de31424
12 changed files with 110 additions and 126 deletions
|
@ -29,11 +29,11 @@ int main()
|
||||||
|
|
||||||
Vector3 cubePosition = { 0.0f, 1.0f, 0.0f };
|
Vector3 cubePosition = { 0.0f, 1.0f, 0.0f };
|
||||||
Vector3 cubeSize = { 2.0f, 2.0f, 2.0f };
|
Vector3 cubeSize = { 2.0f, 2.0f, 2.0f };
|
||||||
|
|
||||||
Ray ray; // Picking line ray
|
Ray ray = {0.0f, 0.0f, 0.0f}; // Picking line ray
|
||||||
|
|
||||||
bool collision = false;
|
bool collision = false;
|
||||||
|
|
||||||
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
@ -45,11 +45,11 @@ int main()
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
UpdateCamera(&camera); // Update camera
|
UpdateCamera(&camera); // Update camera
|
||||||
|
|
||||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
||||||
{
|
{
|
||||||
ray = GetMouseRay(GetMousePosition(), camera);
|
ray = GetMouseRay(GetMousePosition(), camera);
|
||||||
|
|
||||||
// Check collision between ray and box
|
// Check collision between ray and box
|
||||||
collision = CheckCollisionRayBox(ray,
|
collision = CheckCollisionRayBox(ray,
|
||||||
(BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 },
|
(BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 },
|
||||||
|
@ -65,7 +65,7 @@ int main()
|
||||||
|
|
||||||
Begin3dMode(camera);
|
Begin3dMode(camera);
|
||||||
|
|
||||||
if (collision)
|
if (collision)
|
||||||
{
|
{
|
||||||
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED);
|
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED);
|
||||||
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON);
|
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON);
|
||||||
|
@ -77,15 +77,14 @@ int main()
|
||||||
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY);
|
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY);
|
||||||
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY);
|
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawRay(ray, MAROON);
|
DrawRay(ray, MAROON);
|
||||||
|
|
||||||
DrawGrid(10, 1.0f);
|
DrawGrid(10, 1.0f);
|
||||||
|
|
||||||
End3dMode();
|
End3dMode();
|
||||||
|
|
||||||
DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY);
|
DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY);
|
||||||
|
|
||||||
if(collision) DrawText("BOX SELECTED", (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, screenHeight * 0.1f, 30, GREEN);
|
if(collision) DrawText("BOX SELECTED", (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, screenHeight * 0.1f, 30, GREEN);
|
||||||
|
|
||||||
DrawFPS(10, 10);
|
DrawFPS(10, 10);
|
||||||
|
@ -100,4 +99,4 @@ int main()
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* This example has been created using raylib 1.8 (www.raylib.com)
|
* This example has been created using raylib 1.8 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Example based on Berni work on Raspberry Pi:
|
* Example based on Berni work on Raspberry Pi:
|
||||||
* http://forum.raylib.com/index.php?p=/discussion/124/line-versus-triangle-drawing-order
|
* http://forum.raylib.com/index.php?p=/discussion/124/line-versus-triangle-drawing-order
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
|
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
|
||||||
|
@ -30,25 +30,25 @@ int main()
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)");
|
InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)");
|
||||||
|
|
||||||
Texture2D texAngleGauge = LoadTexture("resources/angle_gauge.png");
|
Texture2D texAngleGauge = LoadTexture("resources/angle_gauge.png");
|
||||||
Texture2D texBackground = LoadTexture("resources/background.png");
|
Texture2D texBackground = LoadTexture("resources/background.png");
|
||||||
Texture2D texPitch = LoadTexture("resources/pitch.png");
|
Texture2D texPitch = LoadTexture("resources/pitch.png");
|
||||||
Texture2D texPlane = LoadTexture("resources/plane.png");
|
Texture2D texPlane = LoadTexture("resources/plane.png");
|
||||||
|
|
||||||
RenderTexture2D framebuffer = LoadRenderTexture(192, 192);
|
RenderTexture2D framebuffer = LoadRenderTexture(192, 192);
|
||||||
|
|
||||||
// Model loading
|
// Model loading
|
||||||
Model model = LoadModel("resources/plane.obj"); // Load OBJ model
|
Model model = LoadModel("resources/plane.obj"); // Load OBJ model
|
||||||
model.material.maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png"); // Set map diffuse texture
|
model.material.maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png"); // Set map diffuse texture
|
||||||
|
|
||||||
GenTextureMipmaps(&model.material.maps[MAP_DIFFUSE].texture);
|
GenTextureMipmaps(&model.material.maps[MAP_DIFFUSE].texture);
|
||||||
|
|
||||||
Camera camera = { 0 };
|
Camera camera = { 0 };
|
||||||
camera.position = (Vector3){ 0.0f, 60.0f, -120.0f };// Camera position perspective
|
camera.position = (Vector3){ 0.0f, 60.0f, -120.0f };// Camera position perspective
|
||||||
camera.target = (Vector3){ 0.0f, 12.0f, 0.0f }; // Camera looking at point
|
camera.target = (Vector3){ 0.0f, 12.0f, 0.0f }; // Camera looking at point
|
||||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
||||||
camera.fovy = 30.0f; // Camera field-of-view Y
|
camera.fovy = 30.0f; // Camera field-of-view Y
|
||||||
|
|
||||||
float pitch = 0.0f;
|
float pitch = 0.0f;
|
||||||
float roll = 0.0f;
|
float roll = 0.0f;
|
||||||
float yaw = 0.0f;
|
float yaw = 0.0f;
|
||||||
|
@ -61,7 +61,7 @@ int main()
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Plane roll (x-axis) controls
|
// Plane roll (x-axis) controls
|
||||||
if (IsKeyDown(KEY_LEFT)) roll += 1.0f;
|
if (IsKeyDown(KEY_LEFT)) roll += 1.0f;
|
||||||
else if (IsKeyDown(KEY_RIGHT)) roll -= 1.0f;
|
else if (IsKeyDown(KEY_RIGHT)) roll -= 1.0f;
|
||||||
|
@ -70,7 +70,7 @@ int main()
|
||||||
if (roll > 0.0f) roll -= 0.5f;
|
if (roll > 0.0f) roll -= 0.5f;
|
||||||
else if (roll < 0.0f) roll += 0.5f;
|
else if (roll < 0.0f) roll += 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plane yaw (y-axis) controls
|
// Plane yaw (y-axis) controls
|
||||||
if (IsKeyDown(KEY_S)) yaw += 1.0f;
|
if (IsKeyDown(KEY_S)) yaw += 1.0f;
|
||||||
else if (IsKeyDown(KEY_A)) yaw -= 1.0f;
|
else if (IsKeyDown(KEY_A)) yaw -= 1.0f;
|
||||||
|
@ -79,7 +79,7 @@ int main()
|
||||||
if (yaw > 0.0f) yaw -= 0.5f;
|
if (yaw > 0.0f) yaw -= 0.5f;
|
||||||
else if (yaw < 0.0f) yaw += 0.5f;
|
else if (yaw < 0.0f) yaw += 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plane pitch (z-axis) controls
|
// Plane pitch (z-axis) controls
|
||||||
if (IsKeyDown(KEY_DOWN)) pitch += 0.6f;
|
if (IsKeyDown(KEY_DOWN)) pitch += 0.6f;
|
||||||
else if (IsKeyDown(KEY_UP)) pitch -= 0.6f;
|
else if (IsKeyDown(KEY_UP)) pitch -= 0.6f;
|
||||||
|
@ -88,7 +88,7 @@ int main()
|
||||||
if (pitch > 0.3f) pitch -= 0.3f;
|
if (pitch > 0.3f) pitch -= 0.3f;
|
||||||
else if (pitch < -0.3f) pitch += 0.3f;
|
else if (pitch < -0.3f) pitch += 0.3f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wraps the phase of an angle to fit between -180 and +180 degrees
|
// Wraps the phase of an angle to fit between -180 and +180 degrees
|
||||||
int pitchOffset = pitch;
|
int pitchOffset = pitch;
|
||||||
while (pitchOffset > 180) pitchOffset -= 360;
|
while (pitchOffset > 180) pitchOffset -= 360;
|
||||||
|
@ -96,20 +96,20 @@ int main()
|
||||||
pitchOffset *= 10;
|
pitchOffset *= 10;
|
||||||
|
|
||||||
Matrix transform = MatrixIdentity();
|
Matrix transform = MatrixIdentity();
|
||||||
|
|
||||||
transform = MatrixMultiply(transform, MatrixRotateZ(DEG2RAD*roll));
|
transform = MatrixMultiply(transform, MatrixRotateZ(DEG2RAD*roll));
|
||||||
transform = MatrixMultiply(transform, MatrixRotateX(DEG2RAD*pitch));
|
transform = MatrixMultiply(transform, MatrixRotateX(DEG2RAD*pitch));
|
||||||
transform = MatrixMultiply(transform, MatrixRotateY(DEG2RAD*yaw));
|
transform = MatrixMultiply(transform, MatrixRotateY(DEG2RAD*yaw));
|
||||||
|
|
||||||
model.transform = transform;
|
model.transform = transform;
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
// Draw framebuffer texture (Ahrs Display)
|
// Draw framebuffer texture (Ahrs Display)
|
||||||
int centerX = framebuffer.texture.width/2;
|
int centerX = framebuffer.texture.width/2;
|
||||||
int centerY = framebuffer.texture.height/2;
|
int centerY = framebuffer.texture.height/2;
|
||||||
|
@ -126,11 +126,11 @@ int main()
|
||||||
DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height },
|
DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height },
|
||||||
(Rectangle){ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor },
|
(Rectangle){ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor },
|
||||||
(Vector2){ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE);
|
(Vector2){ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE);
|
||||||
|
|
||||||
DrawTexturePro(texPlane, (Rectangle){ 0, 0, texPlane.width, texPlane.height },
|
DrawTexturePro(texPlane, (Rectangle){ 0, 0, texPlane.width, texPlane.height },
|
||||||
(Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor },
|
(Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor },
|
||||||
(Vector2){ texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE);
|
(Vector2){ texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE);
|
||||||
|
|
||||||
EndBlendMode();
|
EndBlendMode();
|
||||||
|
|
||||||
EndTextureMode();
|
EndTextureMode();
|
||||||
|
@ -147,7 +147,7 @@ int main()
|
||||||
DrawAngleGauge(texAngleGauge, 80, 70, roll, "roll", RED);
|
DrawAngleGauge(texAngleGauge, 80, 70, roll, "roll", RED);
|
||||||
DrawAngleGauge(texAngleGauge, 190, 70, pitch, "pitch", GREEN);
|
DrawAngleGauge(texAngleGauge, 190, 70, pitch, "pitch", GREEN);
|
||||||
DrawAngleGauge(texAngleGauge, 300, 70, yaw, "yaw", SKYBLUE);
|
DrawAngleGauge(texAngleGauge, 300, 70, yaw, "yaw", SKYBLUE);
|
||||||
|
|
||||||
DrawRectangle(30, 360, 260, 70, Fade(SKYBLUE, 0.5f));
|
DrawRectangle(30, 360, 260, 70, Fade(SKYBLUE, 0.5f));
|
||||||
DrawRectangleLines(30, 360, 260, 70, Fade(DARKBLUE, 0.5f));
|
DrawRectangleLines(30, 360, 260, 70, Fade(DARKBLUE, 0.5f));
|
||||||
DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 370, 10, DARKGRAY);
|
DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 370, 10, DARKGRAY);
|
||||||
|
@ -155,31 +155,31 @@ int main()
|
||||||
DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 410, 10, DARKGRAY);
|
DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 410, 10, DARKGRAY);
|
||||||
|
|
||||||
// Draw framebuffer texture
|
// Draw framebuffer texture
|
||||||
DrawTextureRec(framebuffer.texture, (Rectangle){ 0, 0, framebuffer.texture.width, -framebuffer.texture.height },
|
DrawTextureRec(framebuffer.texture, (Rectangle){ 0, 0, framebuffer.texture.width, -framebuffer.texture.height },
|
||||||
(Vector2){ screenWidth - framebuffer.texture.width - 20, 20 }, Fade(WHITE, 0.8f));
|
(Vector2){ screenWidth - framebuffer.texture.width - 20, 20 }, Fade(WHITE, 0.8f));
|
||||||
|
|
||||||
DrawRectangleLines(screenWidth - framebuffer.texture.width - 20, 20, framebuffer.texture.width, framebuffer.texture.height, DARKGRAY);
|
DrawRectangleLines(screenWidth - framebuffer.texture.width - 20, 20, framebuffer.texture.width, framebuffer.texture.height, DARKGRAY);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Unload all loaded data
|
// Unload all loaded data
|
||||||
UnloadModel(model);
|
UnloadModel(model);
|
||||||
|
|
||||||
UnloadRenderTexture(framebuffer);
|
UnloadRenderTexture(framebuffer);
|
||||||
|
|
||||||
UnloadTexture(texAngleGauge);
|
UnloadTexture(texAngleGauge);
|
||||||
UnloadTexture(texBackground);
|
UnloadTexture(texBackground);
|
||||||
UnloadTexture(texPitch);
|
UnloadTexture(texPitch);
|
||||||
UnloadTexture(texPlane);
|
UnloadTexture(texPlane);
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[
|
||||||
int textSize = 20;
|
int textSize = 20;
|
||||||
|
|
||||||
DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color);
|
DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color);
|
||||||
|
|
||||||
DrawText(FormatText("%5.1f°", angle), x - MeasureText(FormatText("%5.1f°", angle), textSize) / 2, y + 10, textSize, DARKGRAY);
|
DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY);
|
||||||
DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY);
|
DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,13 +76,13 @@ int main()
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
unsigned char key;
|
static unsigned char key;
|
||||||
|
|
||||||
InitAudioDevice();
|
InitAudioDevice();
|
||||||
|
|
||||||
Sound fxWav = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
Sound fxWav = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
||||||
Sound fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file
|
Sound fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/audio/guitar_noodling.ogg");
|
Music music = LoadMusicStream("resources/audio/guitar_noodling.ogg");
|
||||||
PlayMusicStream(music);
|
PlayMusicStream(music);
|
||||||
|
|
||||||
|
@ -99,23 +99,23 @@ int main()
|
||||||
PlaySound(fxWav);
|
PlaySound(fxWav);
|
||||||
key = 0;
|
key = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == 'd')
|
if (key == 'd')
|
||||||
{
|
{
|
||||||
PlaySound(fxOgg);
|
PlaySound(fxOgg);
|
||||||
key = 0;
|
key = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateMusicStream(music);
|
UpdateMusicStream(music);
|
||||||
}
|
}
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
UnloadSound(fxWav); // Unload sound data
|
UnloadSound(fxWav); // Unload sound data
|
||||||
UnloadSound(fxOgg); // Unload sound data
|
UnloadSound(fxOgg); // Unload sound data
|
||||||
|
|
||||||
UnloadMusicStream(music); // Unload music stream data
|
UnloadMusicStream(music); // Unload music stream data
|
||||||
|
|
||||||
CloseAudioDevice();
|
CloseAudioDevice();
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
#include <stdlib.h> // Required for: malloc(), free()
|
#include <stdlib.h> // Required for: malloc(), free()
|
||||||
|
|
||||||
#define MAX_BUNNIES 100000 // 100K bunnies
|
#define MAX_BUNNIES 100000 // 100K bunnies
|
||||||
|
@ -29,15 +28,16 @@ int main()
|
||||||
int screenHeight = 960;
|
int screenHeight = 960;
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib example - Bunnymark");
|
InitWindow(screenWidth, screenHeight, "raylib example - Bunnymark");
|
||||||
|
|
||||||
Texture2D texBunny = LoadTexture("resources/wabbit_alpha.png");
|
Texture2D texBunny = LoadTexture("resources/wabbit_alpha.png");
|
||||||
|
|
||||||
Bunny *bunnies = (Bunny *)malloc(MAX_BUNNIES*sizeof(Bunny)); // Bunnies array
|
Bunny *bunnies = (Bunny *)malloc(MAX_BUNNIES*sizeof(Bunny)); // Bunnies array
|
||||||
|
|
||||||
int bunniesCount = 0; // Bunnies counter
|
int bunniesCount = 0; // Bunnies counter
|
||||||
|
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Main game loop
|
// Main game loop
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ int main()
|
||||||
bunniesCount++;
|
bunniesCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update bunnies
|
// Update bunnies
|
||||||
for (int i = 0; i < bunniesCount; i++)
|
for (int i = 0; i < bunniesCount; i++)
|
||||||
{
|
{
|
||||||
|
@ -65,14 +65,14 @@ int main()
|
||||||
if ((bunnies[i].position.y > GetScreenHeight()) || (bunnies[i].position.y < 0)) bunnies[i].speed.y *= -1;
|
if ((bunnies[i].position.y > GetScreenHeight()) || (bunnies[i].position.y < 0)) bunnies[i].speed.y *= -1;
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
for (int i = 0; i <= bunniesCount; i++)
|
for (int i = 0; i < bunniesCount; i++)
|
||||||
{
|
{
|
||||||
// NOTE: When internal QUADS batch limit is reached, a draw call is launched and
|
// NOTE: When internal QUADS batch limit is reached, a draw call is launched and
|
||||||
// batching buffer starts being filled again; before launching the draw call,
|
// batching buffer starts being filled again; before launching the draw call,
|
||||||
|
@ -80,11 +80,10 @@ int main()
|
||||||
// a stall and consequently a frame drop, limiting number of bunnies drawn at 60 fps
|
// a stall and consequently a frame drop, limiting number of bunnies drawn at 60 fps
|
||||||
DrawTexture(texBunny, bunnies[i].position.x, bunnies[i].position.y, RAYWHITE);
|
DrawTexture(texBunny, bunnies[i].position.x, bunnies[i].position.y, RAYWHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawRectangle(0, 0, screenWidth, 40, LIGHTGRAY);
|
DrawRectangle(0, 0, screenWidth, 40, LIGHTGRAY);
|
||||||
DrawText("raylib bunnymark", 10, 10, 20, DARKGRAY);
|
DrawText("raylib bunnymark", 10, 10, 20, DARKGRAY);
|
||||||
DrawText(FormatText("bunnies: %i", bunniesCount), 400, 10, 20, RED);
|
DrawText(FormatText("bunnies: %i", bunniesCount), 400, 10, 20, RED);
|
||||||
|
|
||||||
DrawFPS(260, 10);
|
DrawFPS(260, 10);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
@ -94,9 +93,9 @@ int main()
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
free(bunnies);
|
free(bunnies);
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,8 +39,8 @@ int main()
|
||||||
SetPhysicsGravity(0, 0);
|
SetPhysicsGravity(0, 0);
|
||||||
|
|
||||||
// Create random polygon physics body to shatter
|
// Create random polygon physics body to shatter
|
||||||
PhysicsBody body = CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10);
|
CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10);
|
||||||
|
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ int main()
|
||||||
if (needsReset)
|
if (needsReset)
|
||||||
{
|
{
|
||||||
// Create random polygon physics body to shatter
|
// Create random polygon physics body to shatter
|
||||||
body = CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10);
|
CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsKeyPressed('R')) // Reset physics input
|
if (IsKeyPressed('R')) // Reset physics input
|
||||||
|
|
|
@ -1553,7 +1553,7 @@ void UpdateMusicStream(Music music)
|
||||||
case MUSIC_AUDIO_OGG:
|
case MUSIC_AUDIO_OGG:
|
||||||
{
|
{
|
||||||
// NOTE: Returns the number of samples to process (be careful! we ask for number of shorts!)
|
// NOTE: Returns the number of samples to process (be careful! we ask for number of shorts!)
|
||||||
int numSamplesOgg = stb_vorbis_get_samples_short_interleaved(music->ctxOgg, music->stream.channels, (short *)pcm, samplesCount*music->stream.channels);
|
stb_vorbis_get_samples_short_interleaved(music->ctxOgg, music->stream.channels, (short *)pcm, samplesCount*music->stream.channels);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
#if defined(SUPPORT_FILEFORMAT_FLAC)
|
#if defined(SUPPORT_FILEFORMAT_FLAC)
|
||||||
|
|
18
src/external/jar_xm.h
vendored
18
src/external/jar_xm.h
vendored
|
@ -855,8 +855,6 @@ size_t jar_xm_get_memory_needed_for_context(const char* moddata, size_t moddata_
|
||||||
uint16_t num_instruments;
|
uint16_t num_instruments;
|
||||||
|
|
||||||
/* Read the module header */
|
/* Read the module header */
|
||||||
|
|
||||||
num_channels = READ_U16(offset + 8);
|
|
||||||
num_channels = READ_U16(offset + 8);
|
num_channels = READ_U16(offset + 8);
|
||||||
|
|
||||||
num_patterns = READ_U16(offset + 10);
|
num_patterns = READ_U16(offset + 10);
|
||||||
|
@ -2561,28 +2559,22 @@ uint64_t jar_xm_get_remaining_samples(jar_xm_context_t* ctx)
|
||||||
uint64_t total = 0;
|
uint64_t total = 0;
|
||||||
uint8_t currentLoopCount = jar_xm_get_loop_count(ctx);
|
uint8_t currentLoopCount = jar_xm_get_loop_count(ctx);
|
||||||
jar_xm_set_max_loop_count(ctx, 0);
|
jar_xm_set_max_loop_count(ctx, 0);
|
||||||
|
|
||||||
while(jar_xm_get_loop_count(ctx) == currentLoopCount)
|
while(jar_xm_get_loop_count(ctx) == currentLoopCount)
|
||||||
{
|
{
|
||||||
total += ctx->remaining_samples_in_tick;
|
total += ctx->remaining_samples_in_tick;
|
||||||
ctx->remaining_samples_in_tick = 0;
|
ctx->remaining_samples_in_tick = 0;
|
||||||
jar_xm_tick(ctx);
|
jar_xm_tick(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->loop_count = currentLoopCount;
|
ctx->loop_count = currentLoopCount;
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
//FILE LOADER - TODO - NEEDS TO BE CLEANED UP
|
//FILE LOADER - TODO - NEEDS TO BE CLEANED UP
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#undef DEBUG
|
#undef DEBUG
|
||||||
#define DEBUG(...) do { \
|
#define DEBUG(...) do { \
|
||||||
fprintf(stderr, __VA_ARGS__); \
|
fprintf(stderr, __VA_ARGS__); \
|
||||||
|
@ -2668,13 +2660,7 @@ int jar_xm_create_context_from_file(jar_xm_context_t** ctx, uint32_t rate, const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif//end of JAR_XM_IMPLEMENTATION
|
#endif//end of JAR_XM_IMPLEMENTATION
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif//end of INCLUDE_JAR_XM_H
|
#endif//end of INCLUDE_JAR_XM_H
|
||||||
|
|
1
src/external/rgif.h
vendored
1
src/external/rgif.h
vendored
|
@ -911,7 +911,6 @@ static void GifWriteLzwImage(FILE *f, unsigned char *image, unsigned int left, u
|
||||||
GifWriteCode(f, &stat, clearCode, codeSize); // clear tree
|
GifWriteCode(f, &stat, clearCode, codeSize); // clear tree
|
||||||
|
|
||||||
memset(codetree, 0, sizeof(GifLzwNode)*4096);
|
memset(codetree, 0, sizeof(GifLzwNode)*4096);
|
||||||
curCode = -1;
|
|
||||||
codeSize = minCodeSize + 1;
|
codeSize = minCodeSize + 1;
|
||||||
maxCode = clearCode + 1;
|
maxCode = clearCode + 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -493,7 +493,7 @@ float GetGesturePinchAngle(void)
|
||||||
// Returns angle from two-points vector with X-axis
|
// Returns angle from two-points vector with X-axis
|
||||||
static float Vector2Angle(Vector2 v1, Vector2 v2)
|
static float Vector2Angle(Vector2 v1, Vector2 v2)
|
||||||
{
|
{
|
||||||
float angle = angle = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/PI);
|
float angle = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/PI);
|
||||||
|
|
||||||
if (angle < 0) angle += 360.0f;
|
if (angle < 0) angle += 360.0f;
|
||||||
|
|
||||||
|
|
14
src/models.c
14
src/models.c
|
@ -2347,7 +2347,7 @@ static Mesh LoadOBJ(const char *fileName)
|
||||||
// NOTE: Texture map parameters are not supported
|
// NOTE: Texture map parameters are not supported
|
||||||
static Material LoadMTL(const char *fileName)
|
static Material LoadMTL(const char *fileName)
|
||||||
{
|
{
|
||||||
#define MAX_BUFFER_SIZE 128
|
#define MAX_BUFFER_SIZE 128
|
||||||
|
|
||||||
Material material = { 0 };
|
Material material = { 0 };
|
||||||
|
|
||||||
|
@ -2375,7 +2375,7 @@ static Material LoadMTL(const char *fileName)
|
||||||
case 'n': // newmtl string Material name. Begins a new material description.
|
case 'n': // newmtl string Material name. Begins a new material description.
|
||||||
{
|
{
|
||||||
// TODO: Support multiple materials in a single .mtl
|
// TODO: Support multiple materials in a single .mtl
|
||||||
sscanf(buffer, "newmtl %s", mapFileName);
|
sscanf(buffer, "newmtl %127s", mapFileName);
|
||||||
|
|
||||||
TraceLog(LOG_INFO, "[%s] Loading material...", mapFileName);
|
TraceLog(LOG_INFO, "[%s] Loading material...", mapFileName);
|
||||||
}
|
}
|
||||||
|
@ -2440,12 +2440,12 @@ static Material LoadMTL(const char *fileName)
|
||||||
{
|
{
|
||||||
if (buffer[5] == 'd') // map_Kd string Diffuse color texture map.
|
if (buffer[5] == 'd') // map_Kd string Diffuse color texture map.
|
||||||
{
|
{
|
||||||
result = sscanf(buffer, "map_Kd %s", mapFileName);
|
result = sscanf(buffer, "map_Kd %127s", mapFileName);
|
||||||
if (result != EOF) material.maps[MAP_DIFFUSE].texture = LoadTexture(mapFileName);
|
if (result != EOF) material.maps[MAP_DIFFUSE].texture = LoadTexture(mapFileName);
|
||||||
}
|
}
|
||||||
else if (buffer[5] == 's') // map_Ks string Specular color texture map.
|
else if (buffer[5] == 's') // map_Ks string Specular color texture map.
|
||||||
{
|
{
|
||||||
result = sscanf(buffer, "map_Ks %s", mapFileName);
|
result = sscanf(buffer, "map_Ks %127s", mapFileName);
|
||||||
if (result != EOF) material.maps[MAP_SPECULAR].texture = LoadTexture(mapFileName);
|
if (result != EOF) material.maps[MAP_SPECULAR].texture = LoadTexture(mapFileName);
|
||||||
}
|
}
|
||||||
else if (buffer[5] == 'a') // map_Ka string Ambient color texture map.
|
else if (buffer[5] == 'a') // map_Ka string Ambient color texture map.
|
||||||
|
@ -2455,12 +2455,12 @@ static Material LoadMTL(const char *fileName)
|
||||||
} break;
|
} break;
|
||||||
case 'B': // map_Bump string Bump texture map.
|
case 'B': // map_Bump string Bump texture map.
|
||||||
{
|
{
|
||||||
result = sscanf(buffer, "map_Bump %s", mapFileName);
|
result = sscanf(buffer, "map_Bump %127s", mapFileName);
|
||||||
if (result != EOF) material.maps[MAP_NORMAL].texture = LoadTexture(mapFileName);
|
if (result != EOF) material.maps[MAP_NORMAL].texture = LoadTexture(mapFileName);
|
||||||
} break;
|
} break;
|
||||||
case 'b': // map_bump string Bump texture map.
|
case 'b': // map_bump string Bump texture map.
|
||||||
{
|
{
|
||||||
result = sscanf(buffer, "map_bump %s", mapFileName);
|
result = sscanf(buffer, "map_bump %127s", mapFileName);
|
||||||
if (result != EOF) material.maps[MAP_NORMAL].texture = LoadTexture(mapFileName);
|
if (result != EOF) material.maps[MAP_NORMAL].texture = LoadTexture(mapFileName);
|
||||||
} break;
|
} break;
|
||||||
case 'd': // map_d string Opacity texture map.
|
case 'd': // map_d string Opacity texture map.
|
||||||
|
@ -2485,7 +2485,7 @@ static Material LoadMTL(const char *fileName)
|
||||||
} break;
|
} break;
|
||||||
case 'b': // bump string Bump texture map
|
case 'b': // bump string Bump texture map
|
||||||
{
|
{
|
||||||
result = sscanf(buffer, "bump %s", mapFileName);
|
result = sscanf(buffer, "bump %127s", mapFileName);
|
||||||
if (result != EOF) material.maps[MAP_NORMAL].texture = LoadTexture(mapFileName);
|
if (result != EOF) material.maps[MAP_NORMAL].texture = LoadTexture(mapFileName);
|
||||||
} break;
|
} break;
|
||||||
case 'T': // Tr float Transparency Tr (alpha). Tr is inverse of d
|
case 'T': // Tr float Transparency Tr (alpha). Tr is inverse of d
|
||||||
|
|
|
@ -3373,9 +3373,9 @@ static void LoadBuffersDefault(void)
|
||||||
quads.texcoords = (float *)malloc(sizeof(float)*2*4*MAX_QUADS_BATCH); // 2 float by texcoord, 4 texcoord by quad
|
quads.texcoords = (float *)malloc(sizeof(float)*2*4*MAX_QUADS_BATCH); // 2 float by texcoord, 4 texcoord by quad
|
||||||
quads.colors = (unsigned char *)malloc(sizeof(unsigned char)*4*4*MAX_QUADS_BATCH); // 4 float by color, 4 colors by quad
|
quads.colors = (unsigned char *)malloc(sizeof(unsigned char)*4*4*MAX_QUADS_BATCH); // 4 float by color, 4 colors by quad
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33)
|
||||||
quads.indices = (unsigned int *)malloc(sizeof(int)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
quads.indices = (unsigned int *)malloc(sizeof(unsigned int)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
quads.indices = (unsigned short *)malloc(sizeof(short)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
quads.indices = (unsigned short *)malloc(sizeof(unsigned short)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < (3*4*MAX_QUADS_BATCH); i++) quads.vertices[i] = 0.0f;
|
for (int i = 0; i < (3*4*MAX_QUADS_BATCH); i++) quads.vertices[i] = 0.0f;
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* #define SUPPORT_FILEFORMAT_KTX
|
* #define SUPPORT_FILEFORMAT_KTX
|
||||||
* #define SUPPORT_FILEFORMAT_PVR
|
* #define SUPPORT_FILEFORMAT_PVR
|
||||||
* #define SUPPORT_FILEFORMAT_ASTC
|
* #define SUPPORT_FILEFORMAT_ASTC
|
||||||
* Selecte desired fileformats to be supported for image data loading. Some of those formats are
|
* Selecte desired fileformats to be supported for image data loading. Some of those formats are
|
||||||
* supported by default, to remove support, just comment unrequired #define in this module
|
* supported by default, to remove support, just comment unrequired #define in this module
|
||||||
*
|
*
|
||||||
* #define SUPPORT_IMAGE_MANIPULATION
|
* #define SUPPORT_IMAGE_MANIPULATION
|
||||||
|
@ -112,7 +112,7 @@
|
||||||
#include "external/stb_image.h" // Required for: stbi_load_from_file()
|
#include "external/stb_image.h" // Required for: stbi_load_from_file()
|
||||||
// NOTE: Used to read image data (multiple formats support)
|
// NOTE: Used to read image data (multiple formats support)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SUPPORT_IMAGE_MANIPULATION)
|
#if defined(SUPPORT_IMAGE_MANIPULATION)
|
||||||
#define STB_IMAGE_RESIZE_IMPLEMENTATION
|
#define STB_IMAGE_RESIZE_IMPLEMENTATION
|
||||||
#include "external/stb_image_resize.h" // Required for: stbir_resize_uint8()
|
#include "external/stb_image_resize.h" // Required for: stbir_resize_uint8()
|
||||||
|
@ -188,14 +188,14 @@ Image LoadImage(const char *fileName)
|
||||||
int imgWidth = 0;
|
int imgWidth = 0;
|
||||||
int imgHeight = 0;
|
int imgHeight = 0;
|
||||||
int imgBpp = 0;
|
int imgBpp = 0;
|
||||||
|
|
||||||
FILE *imFile = fopen(fileName, "rb");
|
FILE *imFile = fopen(fileName, "rb");
|
||||||
|
|
||||||
if (imFile != NULL)
|
if (imFile != NULL)
|
||||||
{
|
{
|
||||||
// NOTE: Using stb_image to load images (Supports: BMP, TGA, PNG, JPG, ...)
|
// NOTE: Using stb_image to load images (Supports: BMP, TGA, PNG, JPG, ...)
|
||||||
image.data = stbi_load_from_file(imFile, &imgWidth, &imgHeight, &imgBpp, 0);
|
image.data = stbi_load_from_file(imFile, &imgWidth, &imgHeight, &imgBpp, 0);
|
||||||
|
|
||||||
fclose(imFile);
|
fclose(imFile);
|
||||||
|
|
||||||
image.width = imgWidth;
|
image.width = imgWidth;
|
||||||
|
@ -212,24 +212,24 @@ Image LoadImage(const char *fileName)
|
||||||
else if (IsFileExtension(fileName, ".hdr"))
|
else if (IsFileExtension(fileName, ".hdr"))
|
||||||
{
|
{
|
||||||
int imgBpp = 0;
|
int imgBpp = 0;
|
||||||
|
|
||||||
FILE *imFile = fopen(fileName, "rb");
|
FILE *imFile = fopen(fileName, "rb");
|
||||||
|
|
||||||
stbi_set_flip_vertically_on_load(true);
|
stbi_set_flip_vertically_on_load(true);
|
||||||
|
|
||||||
// Load 32 bit per channel floats data
|
// Load 32 bit per channel floats data
|
||||||
image.data = stbi_loadf_from_file(imFile, &image.width, &image.height, &imgBpp, 0);
|
image.data = stbi_loadf_from_file(imFile, &image.width, &image.height, &imgBpp, 0);
|
||||||
|
|
||||||
stbi_set_flip_vertically_on_load(false);
|
stbi_set_flip_vertically_on_load(false);
|
||||||
|
|
||||||
fclose(imFile);
|
fclose(imFile);
|
||||||
|
|
||||||
image.mipmaps = 1;
|
image.mipmaps = 1;
|
||||||
|
|
||||||
if (imgBpp == 1) image.format = UNCOMPRESSED_R32;
|
if (imgBpp == 1) image.format = UNCOMPRESSED_R32;
|
||||||
else if (imgBpp == 3) image.format = UNCOMPRESSED_R32G32B32;
|
else if (imgBpp == 3) image.format = UNCOMPRESSED_R32G32B32;
|
||||||
else if (imgBpp == 4) image.format = UNCOMPRESSED_R32G32B32A32;
|
else if (imgBpp == 4) image.format = UNCOMPRESSED_R32G32B32A32;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TraceLog(LOG_WARNING, "[%s] Image fileformat not supported", fileName);
|
TraceLog(LOG_WARNING, "[%s] Image fileformat not supported", fileName);
|
||||||
UnloadImage(image);
|
UnloadImage(image);
|
||||||
|
@ -319,10 +319,10 @@ Image LoadImageRaw(const char *fileName, int width, int height, int format, int
|
||||||
if (headerSize > 0) fseek(rawFile, headerSize, SEEK_SET);
|
if (headerSize > 0) fseek(rawFile, headerSize, SEEK_SET);
|
||||||
|
|
||||||
unsigned int size = GetPixelDataSize(width, height, format);
|
unsigned int size = GetPixelDataSize(width, height, format);
|
||||||
|
|
||||||
image.data = malloc(size); // Allocate required memory in bytes
|
image.data = malloc(size); // Allocate required memory in bytes
|
||||||
|
|
||||||
// NOTE: fread() returns num read elements instead of bytes,
|
// NOTE: fread() returns num read elements instead of bytes,
|
||||||
// to get bytes we need to read (1 byte size, elements) instead of (x byte size, 1 element)
|
// to get bytes we need to read (1 byte size, elements) instead of (x byte size, 1 element)
|
||||||
int bytes = fread(image.data, 1, size, rawFile);
|
int bytes = fread(image.data, 1, size, rawFile);
|
||||||
|
|
||||||
|
@ -430,7 +430,7 @@ Color *GetImageData(Image image)
|
||||||
pixels[i].g = ((unsigned char *)image.data)[i];
|
pixels[i].g = ((unsigned char *)image.data)[i];
|
||||||
pixels[i].b = ((unsigned char *)image.data)[i];
|
pixels[i].b = ((unsigned char *)image.data)[i];
|
||||||
pixels[i].a = 255;
|
pixels[i].a = 255;
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case UNCOMPRESSED_GRAY_ALPHA:
|
case UNCOMPRESSED_GRAY_ALPHA:
|
||||||
{
|
{
|
||||||
|
@ -469,7 +469,7 @@ Color *GetImageData(Image image)
|
||||||
pixels[i].g = (unsigned char)((float)((pixel & 0b0000111100000000) >> 8)*(255/15));
|
pixels[i].g = (unsigned char)((float)((pixel & 0b0000111100000000) >> 8)*(255/15));
|
||||||
pixels[i].b = (unsigned char)((float)((pixel & 0b0000000011110000) >> 4)*(255/15));
|
pixels[i].b = (unsigned char)((float)((pixel & 0b0000000011110000) >> 4)*(255/15));
|
||||||
pixels[i].a = (unsigned char)((float)(pixel & 0b0000000000001111)*(255/15));
|
pixels[i].a = (unsigned char)((float)(pixel & 0b0000000000001111)*(255/15));
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case UNCOMPRESSED_R8G8B8A8:
|
case UNCOMPRESSED_R8G8B8A8:
|
||||||
{
|
{
|
||||||
|
@ -516,7 +516,7 @@ int GetPixelDataSize(int width, int height, int format)
|
||||||
case UNCOMPRESSED_R32G32B32: bpp = 32*3; break;
|
case UNCOMPRESSED_R32G32B32: bpp = 32*3; break;
|
||||||
case UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break;
|
case UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break;
|
||||||
case COMPRESSED_DXT1_RGB:
|
case COMPRESSED_DXT1_RGB:
|
||||||
case COMPRESSED_DXT1_RGBA:
|
case COMPRESSED_DXT1_RGBA:
|
||||||
case COMPRESSED_ETC1_RGB:
|
case COMPRESSED_ETC1_RGB:
|
||||||
case COMPRESSED_ETC2_RGB:
|
case COMPRESSED_ETC2_RGB:
|
||||||
case COMPRESSED_PVRT_RGB:
|
case COMPRESSED_PVRT_RGB:
|
||||||
|
@ -530,7 +530,7 @@ int GetPixelDataSize(int width, int height, int format)
|
||||||
}
|
}
|
||||||
|
|
||||||
dataSize = width*height*bpp/8; // Total data size in bytes
|
dataSize = width*height*bpp/8; // Total data size in bytes
|
||||||
|
|
||||||
return dataSize;
|
return dataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,7 +539,7 @@ int GetPixelDataSize(int width, int height, int format)
|
||||||
Image GetTextureData(Texture2D texture)
|
Image GetTextureData(Texture2D texture)
|
||||||
{
|
{
|
||||||
Image image = { 0 };
|
Image image = { 0 };
|
||||||
|
|
||||||
if (texture.format < 8)
|
if (texture.format < 8)
|
||||||
{
|
{
|
||||||
image.data = rlReadTexturePixels(texture);
|
image.data = rlReadTexturePixels(texture);
|
||||||
|
@ -550,7 +550,7 @@ Image GetTextureData(Texture2D texture)
|
||||||
image.height = texture.height;
|
image.height = texture.height;
|
||||||
image.format = texture.format;
|
image.format = texture.format;
|
||||||
image.mipmaps = 1;
|
image.mipmaps = 1;
|
||||||
|
|
||||||
// NOTE: Data retrieved on OpenGL ES 2.0 should be RGBA
|
// NOTE: Data retrieved on OpenGL ES 2.0 should be RGBA
|
||||||
// coming from FBO color buffer, but it seems original
|
// coming from FBO color buffer, but it seems original
|
||||||
// texture format is retrieved on RPI... weird...
|
// texture format is retrieved on RPI... weird...
|
||||||
|
@ -597,15 +597,15 @@ Image ImageCopy(Image image)
|
||||||
for (int i = 0; i < image.mipmaps; i++)
|
for (int i = 0; i < image.mipmaps; i++)
|
||||||
{
|
{
|
||||||
size += GetPixelDataSize(width, height, image.format);
|
size += GetPixelDataSize(width, height, image.format);
|
||||||
|
|
||||||
width /= 2;
|
width /= 2;
|
||||||
height /= 2;
|
height /= 2;
|
||||||
|
|
||||||
// Security check for NPOT textures
|
// Security check for NPOT textures
|
||||||
if (width < 1) width = 1;
|
if (width < 1) width = 1;
|
||||||
if (height < 1) height = 1;
|
if (height < 1) height = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
newImage.data = malloc(size);
|
newImage.data = malloc(size);
|
||||||
|
|
||||||
if (newImage.data != NULL)
|
if (newImage.data != NULL)
|
||||||
|
@ -677,7 +677,7 @@ void ImageFormat(Image *image, int newFormat)
|
||||||
Color *pixels = GetImageData(*image);
|
Color *pixels = GetImageData(*image);
|
||||||
|
|
||||||
free(image->data); // WARNING! We loose mipmaps data --> Regenerated at the end...
|
free(image->data); // WARNING! We loose mipmaps data --> Regenerated at the end...
|
||||||
|
image->data = NULL;
|
||||||
image->format = newFormat;
|
image->format = newFormat;
|
||||||
|
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
@ -771,7 +771,7 @@ void ImageFormat(Image *image, int newFormat)
|
||||||
g = (unsigned char)(round((float)pixels[i].g*15.0f/255));
|
g = (unsigned char)(round((float)pixels[i].g*15.0f/255));
|
||||||
b = (unsigned char)(round((float)pixels[i].b*15.0f/255));
|
b = (unsigned char)(round((float)pixels[i].b*15.0f/255));
|
||||||
a = (unsigned char)(round((float)pixels[i].a*15.0f/255));
|
a = (unsigned char)(round((float)pixels[i].a*15.0f/255));
|
||||||
|
|
||||||
((unsigned short *)image->data)[i] = (unsigned short)r << 12 | (unsigned short)g << 8 | (unsigned short)b << 4 | (unsigned short)a;
|
((unsigned short *)image->data)[i] = (unsigned short)r << 12 | (unsigned short)g << 8 | (unsigned short)b << 4 | (unsigned short)a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,7 +791,7 @@ void ImageFormat(Image *image, int newFormat)
|
||||||
case UNCOMPRESSED_R32:
|
case UNCOMPRESSED_R32:
|
||||||
{
|
{
|
||||||
image->data = (float *)malloc(image->width*image->height*sizeof(float));
|
image->data = (float *)malloc(image->width*image->height*sizeof(float));
|
||||||
|
|
||||||
for (int i = 0; i < image->width*image->height; i++)
|
for (int i = 0; i < image->width*image->height; i++)
|
||||||
{
|
{
|
||||||
((float *)image->data)[i] = (float)((float)pixels[i].r*0.299f/255.0f + (float)pixels[i].g*0.587f/255.0f + (float)pixels[i].b*0.114f/255.0f);
|
((float *)image->data)[i] = (float)((float)pixels[i].r*0.299f/255.0f + (float)pixels[i].g*0.587f/255.0f + (float)pixels[i].b*0.114f/255.0f);
|
||||||
|
@ -824,12 +824,13 @@ void ImageFormat(Image *image, int newFormat)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(pixels);
|
free(pixels);
|
||||||
|
pixels = NULL;
|
||||||
// In case original image had mipmaps, generate mipmaps for formated image
|
// In case original image had mipmaps, generate mipmaps for formated image
|
||||||
// NOTE: Original mipmaps are replaced by new ones, if custom mipmaps were used, they are lost
|
// NOTE: Original mipmaps are replaced by new ones, if custom mipmaps were used, they are lost
|
||||||
if (image->mipmaps > 1)
|
if (image->mipmaps > 1)
|
||||||
{
|
{
|
||||||
image->mipmaps = 1;
|
image->mipmaps = 1;
|
||||||
|
assert(image->data != NULL);
|
||||||
ImageMipmaps(image);
|
ImageMipmaps(image);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue