Edit

kc3-lang/angle/samples/sample_util/texture_utils.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-08-14 10:50:17
    Hash : 49e8de70
    Message : Fix remaining size_t conversion warnings. BUG=angleproject:1120 Change-Id: If4fba903511dcd57d21f8f8178e772cf3cae4187 Reviewed-on: https://chromium-review.googlesource.com/293750 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • samples/sample_util/texture_utils.cpp
  • //
    // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include "texture_utils.h"
    #include <array>
    
    GLuint CreateSimpleTexture2D()
    {
        // Use tightly packed data
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    
        // Generate a texture object
        GLuint texture;
        glGenTextures(1, &texture);
    
        // Bind the texture object
        glBindTexture(GL_TEXTURE_2D, texture);
    
        // Load the texture: 2x2 Image, 3 bytes per pixel (R, G, B)
        const size_t width = 2;
        const size_t height = 2;
        GLubyte pixels[width * height * 3] =
        {
            255,   0,   0, // Red
              0, 255,   0, // Green
              0,   0, 255, // Blue
            255, 255,   0, // Yellow
        };
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
    
        // Set the filtering mode
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    
        return texture;
    }
    
    GLuint CreateSimpleTextureCubemap()
    {
        // Generate a texture object
        GLuint texture;
        glGenTextures(1, &texture);
    
        // Bind the texture object
        glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
    
        // Load the texture faces
        GLubyte pixels[6][3] =
        {
            // Face 0 - Red
            { 255, 0, 0 },
            // Face 1 - Green,
            { 0, 255, 0 },
            // Face 3 - Blue
            { 0, 0, 255 },
            // Face 4 - Yellow
            { 255, 255, 0 },
            // Face 5 - Purple
            { 255, 0, 255 },
            // Face 6 - White
            { 255, 255, 255 }
        };
    
        for (size_t i = 0; i < 6; i++)
        {
            glTexImage2D(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i), 0, GL_RGB, 1, 1, 0,
                         GL_RGB, GL_UNSIGNED_BYTE, &pixels[i]);
        }
    
        // Set the filtering mode
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    
        return texture;
    }
    
    GLuint CreateMipMappedTexture2D()
    {
        // Texture object handle
        const size_t width = 256;
        const size_t height = 256;
        std::array<GLubyte, width * height * 3> pixels;
    
        const size_t checkerSize = 8;
        for (size_t y = 0; y < height; y++)
        {
            for (size_t x = 0; x < width; x++)
            {
                GLubyte rColor = 0;
                GLubyte bColor = 0;
    
                if ((x / checkerSize) % 2 == 0)
                {
                    rColor = 255 * ((y / checkerSize) % 2);
                    bColor = 255 * (1 - ((y / checkerSize) % 2));
                }
                else
                {
                    bColor = 255 * ((y / checkerSize) % 2);
                    rColor = 255 * (1 - ((y / checkerSize) % 2));
                }
    
                pixels[(y * height + x) * 3] = rColor;
                pixels[(y * height + x) * 3 + 1] = 0;
                pixels[(y * height + x) * 3 + 2] = bColor;
            }
        }
    
        // Generate a texture object
        GLuint texture;
        glGenTextures(1, &texture);
    
        // Bind the texture object
        glBindTexture(GL_TEXTURE_2D, texture);
    
        // Load mipmap level 0
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels.data());
    
        // Generate mipmaps
        glGenerateMipmap(GL_TEXTURE_2D);
    
        // Set the filtering mode
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    
        return texture;
    }