Files
godot-angle-static/samples/sample_util/texture_utils.cpp
Corentin Wallez 91c2fadfe6 Fix more warnings in samples and tests
These warnings are currently disabled because these files are not with
angle_code set to 1 in the gyp files to avoid gtest's code warnings.
We hope to either fix warnings in gtest or change our build system to
not use warnings for gtest.

BUG=angleproject:1003

Change-Id: I281781b77f92ef8c394dd53fbbd50d525e4da5c9
Reviewed-on: https://chromium-review.googlesource.com/271412
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Corentin Wallez <cwallez@chromium.org>
2015-05-19 14:38:33 +00:00

130 lines
3.4 KiB
C++

//
// 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(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;
}