1 *8975f5c5SAndroid Build Coastguard Worker //
2 *8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3 *8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4 *8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5 *8975f5c5SAndroid Build Coastguard Worker //
6 *8975f5c5SAndroid Build Coastguard Worker
7 *8975f5c5SAndroid Build Coastguard Worker #include "texture_utils.h"
8 *8975f5c5SAndroid Build Coastguard Worker #include <array>
9 *8975f5c5SAndroid Build Coastguard Worker #include <cstddef>
10 *8975f5c5SAndroid Build Coastguard Worker
CreateSimpleTexture2D()11 *8975f5c5SAndroid Build Coastguard Worker GLuint CreateSimpleTexture2D()
12 *8975f5c5SAndroid Build Coastguard Worker {
13 *8975f5c5SAndroid Build Coastguard Worker // Use tightly packed data
14 *8975f5c5SAndroid Build Coastguard Worker glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
15 *8975f5c5SAndroid Build Coastguard Worker
16 *8975f5c5SAndroid Build Coastguard Worker // Generate a texture object
17 *8975f5c5SAndroid Build Coastguard Worker GLuint texture;
18 *8975f5c5SAndroid Build Coastguard Worker glGenTextures(1, &texture);
19 *8975f5c5SAndroid Build Coastguard Worker
20 *8975f5c5SAndroid Build Coastguard Worker // Bind the texture object
21 *8975f5c5SAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, texture);
22 *8975f5c5SAndroid Build Coastguard Worker
23 *8975f5c5SAndroid Build Coastguard Worker // Load the texture: 2x2 Image, 3 bytes per pixel (R, G, B)
24 *8975f5c5SAndroid Build Coastguard Worker const size_t width = 2;
25 *8975f5c5SAndroid Build Coastguard Worker const size_t height = 2;
26 *8975f5c5SAndroid Build Coastguard Worker GLubyte pixels[width * height * 3] = {
27 *8975f5c5SAndroid Build Coastguard Worker 255, 0, 0, // Red
28 *8975f5c5SAndroid Build Coastguard Worker 0, 255, 0, // Green
29 *8975f5c5SAndroid Build Coastguard Worker 0, 0, 255, // Blue
30 *8975f5c5SAndroid Build Coastguard Worker 255, 255, 0, // Yellow
31 *8975f5c5SAndroid Build Coastguard Worker };
32 *8975f5c5SAndroid Build Coastguard Worker glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
33 *8975f5c5SAndroid Build Coastguard Worker
34 *8975f5c5SAndroid Build Coastguard Worker // Set the filtering mode
35 *8975f5c5SAndroid Build Coastguard Worker glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
36 *8975f5c5SAndroid Build Coastguard Worker glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
37 *8975f5c5SAndroid Build Coastguard Worker
38 *8975f5c5SAndroid Build Coastguard Worker return texture;
39 *8975f5c5SAndroid Build Coastguard Worker }
40 *8975f5c5SAndroid Build Coastguard Worker
CreateSimpleTextureCubemap()41 *8975f5c5SAndroid Build Coastguard Worker GLuint CreateSimpleTextureCubemap()
42 *8975f5c5SAndroid Build Coastguard Worker {
43 *8975f5c5SAndroid Build Coastguard Worker // Generate a texture object
44 *8975f5c5SAndroid Build Coastguard Worker GLuint texture;
45 *8975f5c5SAndroid Build Coastguard Worker glGenTextures(1, &texture);
46 *8975f5c5SAndroid Build Coastguard Worker
47 *8975f5c5SAndroid Build Coastguard Worker // Bind the texture object
48 *8975f5c5SAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
49 *8975f5c5SAndroid Build Coastguard Worker
50 *8975f5c5SAndroid Build Coastguard Worker // Load the texture faces
51 *8975f5c5SAndroid Build Coastguard Worker GLubyte pixels[6][3] = {// Face 0 - Red
52 *8975f5c5SAndroid Build Coastguard Worker {255, 0, 0},
53 *8975f5c5SAndroid Build Coastguard Worker // Face 1 - Green,
54 *8975f5c5SAndroid Build Coastguard Worker {0, 255, 0},
55 *8975f5c5SAndroid Build Coastguard Worker // Face 3 - Blue
56 *8975f5c5SAndroid Build Coastguard Worker {0, 0, 255},
57 *8975f5c5SAndroid Build Coastguard Worker // Face 4 - Yellow
58 *8975f5c5SAndroid Build Coastguard Worker {255, 255, 0},
59 *8975f5c5SAndroid Build Coastguard Worker // Face 5 - Purple
60 *8975f5c5SAndroid Build Coastguard Worker {255, 0, 255},
61 *8975f5c5SAndroid Build Coastguard Worker // Face 6 - White
62 *8975f5c5SAndroid Build Coastguard Worker {255, 255, 255}};
63 *8975f5c5SAndroid Build Coastguard Worker
64 *8975f5c5SAndroid Build Coastguard Worker for (size_t i = 0; i < 6; i++)
65 *8975f5c5SAndroid Build Coastguard Worker {
66 *8975f5c5SAndroid Build Coastguard Worker glTexImage2D(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i), 0, GL_RGB, 1, 1, 0,
67 *8975f5c5SAndroid Build Coastguard Worker GL_RGB, GL_UNSIGNED_BYTE, &pixels[i]);
68 *8975f5c5SAndroid Build Coastguard Worker }
69 *8975f5c5SAndroid Build Coastguard Worker
70 *8975f5c5SAndroid Build Coastguard Worker // Set the filtering mode
71 *8975f5c5SAndroid Build Coastguard Worker glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
72 *8975f5c5SAndroid Build Coastguard Worker glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
73 *8975f5c5SAndroid Build Coastguard Worker
74 *8975f5c5SAndroid Build Coastguard Worker return texture;
75 *8975f5c5SAndroid Build Coastguard Worker }
76 *8975f5c5SAndroid Build Coastguard Worker
CreateMipMappedTexture2D()77 *8975f5c5SAndroid Build Coastguard Worker GLuint CreateMipMappedTexture2D()
78 *8975f5c5SAndroid Build Coastguard Worker {
79 *8975f5c5SAndroid Build Coastguard Worker // Texture object handle
80 *8975f5c5SAndroid Build Coastguard Worker const size_t width = 256;
81 *8975f5c5SAndroid Build Coastguard Worker const size_t height = 256;
82 *8975f5c5SAndroid Build Coastguard Worker std::array<GLubyte, width * height * 3> pixels;
83 *8975f5c5SAndroid Build Coastguard Worker
84 *8975f5c5SAndroid Build Coastguard Worker const size_t checkerSize = 8;
85 *8975f5c5SAndroid Build Coastguard Worker for (size_t y = 0; y < height; y++)
86 *8975f5c5SAndroid Build Coastguard Worker {
87 *8975f5c5SAndroid Build Coastguard Worker for (size_t x = 0; x < width; x++)
88 *8975f5c5SAndroid Build Coastguard Worker {
89 *8975f5c5SAndroid Build Coastguard Worker GLubyte rColor = 0;
90 *8975f5c5SAndroid Build Coastguard Worker GLubyte bColor = 0;
91 *8975f5c5SAndroid Build Coastguard Worker
92 *8975f5c5SAndroid Build Coastguard Worker if ((x / checkerSize) % 2 == 0)
93 *8975f5c5SAndroid Build Coastguard Worker {
94 *8975f5c5SAndroid Build Coastguard Worker rColor = 255 * ((y / checkerSize) % 2);
95 *8975f5c5SAndroid Build Coastguard Worker bColor = 255 * (1 - ((y / checkerSize) % 2));
96 *8975f5c5SAndroid Build Coastguard Worker }
97 *8975f5c5SAndroid Build Coastguard Worker else
98 *8975f5c5SAndroid Build Coastguard Worker {
99 *8975f5c5SAndroid Build Coastguard Worker bColor = 255 * ((y / checkerSize) % 2);
100 *8975f5c5SAndroid Build Coastguard Worker rColor = 255 * (1 - ((y / checkerSize) % 2));
101 *8975f5c5SAndroid Build Coastguard Worker }
102 *8975f5c5SAndroid Build Coastguard Worker
103 *8975f5c5SAndroid Build Coastguard Worker pixels[(y * height + x) * 3] = rColor;
104 *8975f5c5SAndroid Build Coastguard Worker pixels[(y * height + x) * 3 + 1] = 0;
105 *8975f5c5SAndroid Build Coastguard Worker pixels[(y * height + x) * 3 + 2] = bColor;
106 *8975f5c5SAndroid Build Coastguard Worker }
107 *8975f5c5SAndroid Build Coastguard Worker }
108 *8975f5c5SAndroid Build Coastguard Worker
109 *8975f5c5SAndroid Build Coastguard Worker // Generate a texture object
110 *8975f5c5SAndroid Build Coastguard Worker GLuint texture;
111 *8975f5c5SAndroid Build Coastguard Worker glGenTextures(1, &texture);
112 *8975f5c5SAndroid Build Coastguard Worker
113 *8975f5c5SAndroid Build Coastguard Worker // Bind the texture object
114 *8975f5c5SAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, texture);
115 *8975f5c5SAndroid Build Coastguard Worker
116 *8975f5c5SAndroid Build Coastguard Worker // Load mipmap level 0
117 *8975f5c5SAndroid Build Coastguard Worker glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE,
118 *8975f5c5SAndroid Build Coastguard Worker pixels.data());
119 *8975f5c5SAndroid Build Coastguard Worker
120 *8975f5c5SAndroid Build Coastguard Worker // Generate mipmaps
121 *8975f5c5SAndroid Build Coastguard Worker glGenerateMipmap(GL_TEXTURE_2D);
122 *8975f5c5SAndroid Build Coastguard Worker
123 *8975f5c5SAndroid Build Coastguard Worker // Set the filtering mode
124 *8975f5c5SAndroid Build Coastguard Worker glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
125 *8975f5c5SAndroid Build Coastguard Worker glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
126 *8975f5c5SAndroid Build Coastguard Worker
127 *8975f5c5SAndroid Build Coastguard Worker return texture;
128 *8975f5c5SAndroid Build Coastguard Worker }
129