mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-10-26 12:27:01 +00:00 
			
		
		
		
	Review BeginTextureMode() usage
Moved outside BeginDrawing()/EndDrawing() to illustrate drawing is happening to an external texture (not screen)
This commit is contained in:
		| @@ -65,11 +65,11 @@ int main(void) | ||||
|     // Setup orbital camera | ||||
|     SetCameraMode(camera, CAMERA_ORBITAL);  // Set an orbital 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 | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     // Main game loop | ||||
|     while (!WindowShouldClose())            // Detect window close button or ESC key | ||||
|     while (!WindowShouldClose())        // Detect window close button or ESC key | ||||
|     { | ||||
|         // Update | ||||
|         //---------------------------------------------------------------------------------- | ||||
| @@ -81,55 +81,46 @@ int main(void) | ||||
|         // Send new value to the shader to be used on drawing | ||||
|         SetShaderValue(shader, swirlCenterLoc, swirlCenter, SHADER_UNIFORM_VEC2); | ||||
|  | ||||
|         UpdateCamera(&camera);              // Update camera | ||||
|         UpdateCamera(&camera);          // Update camera | ||||
|         //---------------------------------------------------------------------------------- | ||||
|  | ||||
|         // Draw | ||||
|         //---------------------------------------------------------------------------------- | ||||
|         BeginTextureMode(target);       // Enable drawing to texture | ||||
|             ClearBackground(RAYWHITE);  // Clear texture background | ||||
|  | ||||
|             BeginMode3D(camera);        // Begin 3d mode drawing | ||||
|                 DrawModel(model, position, 0.5f, WHITE);   // Draw 3d model with texture | ||||
|                 DrawGrid(10, 1.0f);     // Draw a grid | ||||
|             EndMode3D();                // End 3d mode drawing, returns to orthographic 2d mode | ||||
|  | ||||
|             DrawText("TEXT DRAWN IN RENDER TEXTURE", 200, 10, 30, RED); | ||||
|         EndTextureMode();               // End drawing to texture (now we have a texture available for next passes) | ||||
|  | ||||
|         BeginDrawing(); | ||||
|             ClearBackground(RAYWHITE);  // Clear screen background | ||||
|  | ||||
|             ClearBackground(RAYWHITE); | ||||
|  | ||||
|             BeginTextureMode(target);       // Enable drawing to texture | ||||
|  | ||||
|                 ClearBackground(RAYWHITE);  // Clear texture background | ||||
|  | ||||
|                 BeginMode3D(camera);        // Begin 3d mode drawing | ||||
|  | ||||
|                     DrawModel(model, position, 0.5f, WHITE);   // Draw 3d model with texture | ||||
|  | ||||
|                     DrawGrid(10, 1.0f);     // Draw a grid | ||||
|  | ||||
|                 EndMode3D();                // End 3d mode drawing, returns to orthographic 2d mode | ||||
|  | ||||
|                 DrawText("TEXT DRAWN IN RENDER TEXTURE", 200, 10, 30, RED); | ||||
|  | ||||
|             EndTextureMode();               // End drawing to texture (now we have a texture available for next passes) | ||||
|  | ||||
|             // Enable shader using the custom uniform | ||||
|             BeginShaderMode(shader); | ||||
|  | ||||
|                 // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) | ||||
|                 DrawTextureRec(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2){ 0, 0 }, WHITE); | ||||
|  | ||||
|             EndShaderMode(); | ||||
|  | ||||
|             // Draw some 2d text over drawn texture | ||||
|             DrawText("(c) Barracks 3D model by Alberto Cano", screenWidth - 220, screenHeight - 20, 10, GRAY); | ||||
|  | ||||
|             DrawFPS(10, 10); | ||||
|  | ||||
|         EndDrawing(); | ||||
|         //---------------------------------------------------------------------------------- | ||||
|     } | ||||
|  | ||||
|     // De-Initialization | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|     UnloadShader(shader);           // Unload shader | ||||
|     UnloadTexture(texture);         // Unload texture | ||||
|     UnloadModel(model);             // Unload model | ||||
|     UnloadRenderTexture(target);    // Unload render texture | ||||
|     UnloadShader(shader);               // Unload shader | ||||
|     UnloadTexture(texture);             // Unload texture | ||||
|     UnloadModel(model);                 // Unload model | ||||
|     UnloadRenderTexture(target);        // Unload render texture | ||||
|  | ||||
|     CloseWindow();                  // Close window and OpenGL context | ||||
|     CloseWindow();                      // Close window and OpenGL context | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     return 0; | ||||
|   | ||||
| @@ -46,11 +46,11 @@ int main(void) | ||||
|     // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader | ||||
|     Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/eratosthenes.fs", GLSL_VERSION)); | ||||
|  | ||||
|     SetTargetFPS(60);               // Set our game to run at 60 frames-per-second | ||||
|     SetTargetFPS(60);                   // Set our game to run at 60 frames-per-second | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     // Main game loop | ||||
|     while (!WindowShouldClose())    // Detect window close button or ESC key | ||||
|     while (!WindowShouldClose())        // Detect window close button or ESC key | ||||
|     { | ||||
|         // Update | ||||
|         //---------------------------------------------------------------------------------- | ||||
| @@ -59,35 +59,33 @@ int main(void) | ||||
|  | ||||
|         // Draw | ||||
|         //---------------------------------------------------------------------------------- | ||||
|         BeginTextureMode(target);       // Enable drawing to texture | ||||
|             ClearBackground(BLACK);     // Clear the render texture | ||||
|  | ||||
|             // Draw a rectangle in shader mode to be used as shader canvas | ||||
|             // NOTE: Rectangle uses font white character texture coordinates, | ||||
|             // so shader can not be applied here directly because input vertexTexCoord | ||||
|             // do not represent full screen coordinates (space where want to apply shader) | ||||
|             DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); | ||||
|         EndTextureMode();               // End drawing to texture (now we have a blank texture available for the shader) | ||||
|  | ||||
|         BeginDrawing(); | ||||
|  | ||||
|             ClearBackground(RAYWHITE); | ||||
|  | ||||
|             BeginTextureMode(target);   // Enable drawing to texture | ||||
|                 ClearBackground(BLACK); // Clear the render texture | ||||
|  | ||||
|                 // Draw a rectangle in shader mode to be used as shader canvas | ||||
|                 // NOTE: Rectangle uses font white character texture coordinates, | ||||
|                 // so shader can not be applied here directly because input vertexTexCoord | ||||
|                 // do not represent full screen coordinates (space where want to apply shader) | ||||
|                 DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); | ||||
|             EndTextureMode();           // End drawing to texture (now we have a blank texture available for the shader) | ||||
|             ClearBackground(RAYWHITE);  // Clear screen background | ||||
|  | ||||
|             BeginShaderMode(shader); | ||||
|                 // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) | ||||
|                 DrawTextureRec(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2){ 0.0f, 0.0f }, WHITE); | ||||
|             EndShaderMode(); | ||||
|  | ||||
|         EndDrawing(); | ||||
|         //---------------------------------------------------------------------------------- | ||||
|     } | ||||
|  | ||||
|     // De-Initialization | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|     UnloadShader(shader);           // Unload shader | ||||
|     UnloadRenderTexture(target);    // Unload texture | ||||
|     UnloadShader(shader);               // Unload shader | ||||
|     UnloadRenderTexture(target);        // Unload render texture | ||||
|  | ||||
|     CloseWindow();                  // Close window and OpenGL context | ||||
|     CloseWindow();                      // Close window and OpenGL context | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     return 0; | ||||
|   | ||||
| @@ -75,15 +75,15 @@ int main(void) | ||||
|     SetShaderValue(shader, zoomLoc, &zoom, SHADER_UNIFORM_FLOAT); | ||||
|     SetShaderValue(shader, offsetLoc, offset, SHADER_UNIFORM_VEC2); | ||||
|  | ||||
|     int incrementSpeed = 0;         // Multiplier of speed to change c value | ||||
|     bool showControls = true;       // Show controls | ||||
|     bool pause = false;             // Pause animation | ||||
|     int incrementSpeed = 0;             // Multiplier of speed to change c value | ||||
|     bool showControls = true;           // Show controls | ||||
|     bool pause = false;                 // Pause animation | ||||
|  | ||||
|     SetTargetFPS(60);               // Set our game to run at 60 frames-per-second | ||||
|     SetTargetFPS(60);                   // Set our game to run at 60 frames-per-second | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     // Main game loop | ||||
|     while (!WindowShouldClose())    // Detect window close button or ESC key | ||||
|     while (!WindowShouldClose())        // Detect window close button or ESC key | ||||
|     { | ||||
|         // Update | ||||
|         //---------------------------------------------------------------------------------- | ||||
| @@ -145,20 +145,19 @@ int main(void) | ||||
|  | ||||
|         // Draw | ||||
|         //---------------------------------------------------------------------------------- | ||||
|         // Using a render texture to draw Julia set | ||||
|         BeginTextureMode(target);       // Enable drawing to texture | ||||
|             ClearBackground(BLACK);     // Clear the render texture | ||||
|  | ||||
|             // Draw a rectangle in shader mode to be used as shader canvas | ||||
|             // NOTE: Rectangle uses font white character texture coordinates, | ||||
|             // so shader can not be applied here directly because input vertexTexCoord | ||||
|             // do not represent full screen coordinates (space where want to apply shader) | ||||
|             DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); | ||||
|         EndTextureMode(); | ||||
|              | ||||
|         BeginDrawing(); | ||||
|  | ||||
|             ClearBackground(BLACK);         // Clear the screen of the previous frame. | ||||
|  | ||||
|             // Using a render texture to draw Julia set | ||||
|             BeginTextureMode(target);       // Enable drawing to texture | ||||
|                 ClearBackground(BLACK);     // Clear the render texture | ||||
|  | ||||
|                 // Draw a rectangle in shader mode to be used as shader canvas | ||||
|                 // NOTE: Rectangle uses font white character texture coordinates, | ||||
|                 // so shader can not be applied here directly because input vertexTexCoord | ||||
|                 // do not represent full screen coordinates (space where want to apply shader) | ||||
|                 DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); | ||||
|             EndTextureMode(); | ||||
|             ClearBackground(BLACK);     // Clear screen background | ||||
|  | ||||
|             // Draw the saved texture and rendered julia set with shader | ||||
|             // NOTE: We do not invert texture on Y, already considered inside shader | ||||
| @@ -176,17 +175,16 @@ int main(void) | ||||
|                 DrawText("Press KEY_LEFT | KEY_RIGHT to change speed", 10, 60, 10, RAYWHITE); | ||||
|                 DrawText("Press KEY_SPACE to pause movement animation", 10, 75, 10, RAYWHITE); | ||||
|             } | ||||
|  | ||||
|         EndDrawing(); | ||||
|         //---------------------------------------------------------------------------------- | ||||
|     } | ||||
|  | ||||
|     // De-Initialization | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|     UnloadShader(shader);           // Unload shader | ||||
|     UnloadRenderTexture(target);    // Unload render texture | ||||
|     UnloadShader(shader);               // Unload shader | ||||
|     UnloadRenderTexture(target);        // Unload render texture | ||||
|  | ||||
|     CloseWindow();                  // Close window and OpenGL context | ||||
|     CloseWindow();                      // Close window and OpenGL context | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     return 0; | ||||
|   | ||||
| @@ -124,50 +124,38 @@ int main(void) | ||||
|  | ||||
|         // Draw | ||||
|         //---------------------------------------------------------------------------------- | ||||
|         BeginTextureMode(target);       // Enable drawing to texture | ||||
|             ClearBackground(RAYWHITE);  // Clear texture background | ||||
|  | ||||
|             BeginMode3D(camera);        // Begin 3d mode drawing | ||||
|                 DrawModel(model, position, 0.1f, WHITE);   // Draw 3d model with texture | ||||
|                 DrawGrid(10, 1.0f);     // Draw a grid | ||||
|             EndMode3D();                // End 3d mode drawing, returns to orthographic 2d mode | ||||
|         EndTextureMode();               // End drawing to texture (now we have a texture available for next passes) | ||||
|          | ||||
|         BeginDrawing(); | ||||
|             ClearBackground(RAYWHITE);  // Clear screen background | ||||
|  | ||||
|             ClearBackground(RAYWHITE); | ||||
|  | ||||
|             BeginTextureMode(target);       // Enable drawing to texture | ||||
|  | ||||
|                 ClearBackground(RAYWHITE);  // Clear texture background | ||||
|  | ||||
|                 BeginMode3D(camera);        // Begin 3d mode drawing | ||||
|  | ||||
|                     DrawModel(model, position, 0.1f, WHITE);   // Draw 3d model with texture | ||||
|  | ||||
|                     DrawGrid(10, 1.0f);     // Draw a grid | ||||
|  | ||||
|                 EndMode3D();                // End 3d mode drawing, returns to orthographic 2d mode | ||||
|  | ||||
|             EndTextureMode();               // End drawing to texture (now we have a texture available for next passes) | ||||
|  | ||||
|             // Render previously generated texture using selected postpro shader | ||||
|             // Render generated texture using selected postprocessing shader | ||||
|             BeginShaderMode(shaders[currentShader]); | ||||
|  | ||||
|                 // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) | ||||
|                 DrawTextureRec(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2){ 0, 0 }, WHITE); | ||||
|  | ||||
|             EndShaderMode(); | ||||
|  | ||||
|             // Draw 2d shapes and text over drawn texture | ||||
|             DrawRectangle(0, 9, 580, 30, Fade(LIGHTGRAY, 0.7f)); | ||||
|  | ||||
|             DrawText("(c) Church 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); | ||||
|  | ||||
|             DrawText("CURRENT POSTPRO SHADER:", 10, 15, 20, BLACK); | ||||
|             DrawText(postproShaderText[currentShader], 330, 15, 20, RED); | ||||
|             DrawText("< >", 540, 10, 30, DARKBLUE); | ||||
|  | ||||
|             DrawFPS(700, 15); | ||||
|  | ||||
|         EndDrawing(); | ||||
|         //---------------------------------------------------------------------------------- | ||||
|     } | ||||
|  | ||||
|     // De-Initialization | ||||
|     //-------------------------------------------------------------------------------------- | ||||
|  | ||||
|     // Unload all postpro shaders | ||||
|     for (int i = 0; i < MAX_POSTPRO_SHADERS; i++) UnloadShader(shaders[i]); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Ray
					Ray