Quellcode durchsuchen

Added texture colorspace testing

Sam Lantinga vor 7 Monaten
Ursprung
Commit
4e43da684c
1 geänderte Dateien mit 95 neuen und 0 gelöschten Zeilen
  1. 95 0
      test/testcolorspace.c

+ 95 - 0
test/testcolorspace.c

@@ -40,6 +40,8 @@ enum
 {
     StageClearBackground,
     StageDrawBackground,
+    StageTextureBackground,
+    StageTargetBackground,
     StageBlendDrawing,
     StageBlendTexture,
     StageGradientDrawing,
@@ -239,6 +241,93 @@ static void RenderDrawBackground(void)
     }
 }
 
+static SDL_Texture *CreateGrayTexture(void)
+{
+    SDL_Texture *texture;
+    Uint8 pixels[4];
+
+    /* Floating point textures are in the linear colorspace by default */
+    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_STATIC, 1, 1);
+    if (!texture) {
+        return NULL;
+    }
+
+    pixels[0] = 128;
+    pixels[1] = 128;
+    pixels[2] = 128;
+    pixels[3] = 255;
+    SDL_UpdateTexture(texture, NULL, pixels, sizeof(pixels));
+
+    return texture;
+}
+
+static void RenderTextureBackground(void)
+{
+    /* Fill the background with a 50% gray texture.
+     * This will be darker when using sRGB colors and lighter using linear colors
+     */
+    SDL_Texture *texture = CreateGrayTexture();
+    SDL_RenderTexture(renderer, texture, NULL, NULL);
+    SDL_DestroyTexture(texture);
+
+    /* Check the renderered pixels */
+    SDL_Color c;
+    if (!ReadPixel(0, 0, &c)) {
+        return;
+    }
+
+    float x = TEXT_START_X;
+    float y = TEXT_START_Y;
+    DrawText(x, y, "%s %s", renderer_name, colorspace_name);
+    y += TEXT_LINE_ADVANCE;
+    DrawText(x, y, "Test: Fill 50%% Gray Texture");
+    y += TEXT_LINE_ADVANCE;
+    DrawText(x, y, "Background color written: 0x808080, read: 0x%.2x%.2x%.2x", c.r, c.g, c.b);
+    y += TEXT_LINE_ADVANCE;
+    if (c.r != 128) {
+        DrawText(x, y, "Incorrect background color, unknown reason");
+        y += TEXT_LINE_ADVANCE;
+    }
+}
+
+static void RenderTargetBackground(void)
+{
+    /* Fill the background with a 50% gray texture.
+     * This will be darker when using sRGB colors and lighter using linear colors
+     */
+    SDL_Texture *target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, 1, 1);
+    SDL_Texture *texture = CreateGrayTexture();
+
+    /* Fill the render target with the gray texture */
+    SDL_SetRenderTarget(renderer, target);
+    SDL_RenderTexture(renderer, texture, NULL, NULL);
+    SDL_DestroyTexture(texture);
+
+    /* Fill the output with the render target */
+    SDL_SetRenderTarget(renderer, NULL);
+    SDL_RenderTexture(renderer, target, NULL, NULL);
+    SDL_DestroyTexture(target);
+
+    /* Check the renderered pixels */
+    SDL_Color c;
+    if (!ReadPixel(0, 0, &c)) {
+        return;
+    }
+
+    float x = TEXT_START_X;
+    float y = TEXT_START_Y;
+    DrawText(x, y, "%s %s", renderer_name, colorspace_name);
+    y += TEXT_LINE_ADVANCE;
+    DrawText(x, y, "Test: Fill 50%% Gray Render Target");
+    y += TEXT_LINE_ADVANCE;
+    DrawText(x, y, "Background color written: 0x808080, read: 0x%.2x%.2x%.2x", c.r, c.g, c.b);
+    y += TEXT_LINE_ADVANCE;
+    if (c.r != 128) {
+        DrawText(x, y, "Incorrect background color, unknown reason");
+        y += TEXT_LINE_ADVANCE;
+    }
+}
+
 static void RenderBlendDrawing(void)
 {
     SDL_Color a = { 238, 70, 166, 255 }; /* red square */
@@ -541,6 +630,12 @@ static void loop(void)
         case StageDrawBackground:
             RenderDrawBackground();
             break;
+        case StageTextureBackground:
+            RenderTextureBackground();
+            break;
+        case StageTargetBackground:
+            RenderTargetBackground();
+            break;
         case StageBlendDrawing:
             RenderBlendDrawing();
             break;