Skip to content

Commit

Permalink
Texture Tiling Example - luis605 (#3353)
Browse files Browse the repository at this point in the history
* Texture Tiling Example - luis605

* Removed SetTraceLogLevel(LOG_WARNING);
  • Loading branch information
luis605 committed Oct 1, 2023
1 parent 7351240 commit bc15c19
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 0 deletions.
14 changes: 14 additions & 0 deletions examples/shaders/resources/shaders/glsl330/tiling.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#version 330 core

uniform sampler2D diffuseMap;
uniform vec2 tiling;

in vec2 fragTexCoord;

out vec4 fragColor;

void main()
{
vec2 texCoord = fragTexCoord * tiling;
fragColor = texture(diffuseMap, texCoord);
}
94 changes: 94 additions & 0 deletions examples/shaders/shader_texture_tiling.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*******************************************************************************************
*
* raylib [textures] example - Texture Tiling
*
* Example demonstrates how to tile a texture on a 3D model using raylib.
*
* Example contributed by Luís Almeida (https://github.com/luis605)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2023 Luís Almeida (https://github.com/luis605)
*
********************************************************************************************/

#include "raylib.h"

//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------

int main(void)
{
const int screenWidth = 800;
const int screenHeight = 600;

// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "Raylib Texture Tiling");

SetTargetFPS(60);

// Load a texture
Texture2D texture = LoadTexture("resources/raylib_logo.png");

// Create a cube mesh
Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f);

// Load the texture onto the GPU
Model model = LoadModelFromMesh(cube);
model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture;

// Set the tiling of the texture
float tiling[2] = {3.0f, 3.0f};
Shader shader = LoadShader(0, "resources/shaders/glsl330/tiling.fs"); // Create a custom shader in a .glsl file
SetShaderValue(shader, GetShaderLocation(shader, "tiling"), tiling, SHADER_UNIFORM_VEC2);
model.materials[0].shader = shader;

// Camera setup
Camera camera = { 0 };
camera.position = (Vector3){ 3.0f, 3.0f, 3.0f };
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
camera.fovy = 45.0f;
camera.projection = CAMERA_PERSPECTIVE;

// Main game loop
while (!WindowShouldClose())
{
// Update
//----------------------------------------------------------------------------------

BeginDrawing();
ClearBackground(RAYWHITE);
UpdateCamera(&camera, CAMERA_FREE);

// Draw the model
{
BeginMode3D(camera);
BeginShaderMode(shader);

DrawModel(model, (Vector3){ 0.0f, 0.0f, 0.0f }, 5.0f, WHITE);

EndShaderMode();
EndMode3D();
}

DrawText("Use mouse to rotate the camera", 10, 10, 20, DARKGRAY);

EndDrawing();
}

// De-Initialization
//--------------------------------------------------------------------------------------

UnloadTexture(texture); // Unload texture
UnloadModel(model); // Unload model
UnloadShader(shader); // Unload shader


CloseWindow(); // Close window and OpenGL context

return 0;
}

0 comments on commit bc15c19

Please sign in to comment.