OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
3 * All rights reserved. | 3 * All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 25 matching lines...) Expand all Loading... |
36 #include "command_buffer/service/cross/gl/sampler_gl.h" | 36 #include "command_buffer/service/cross/gl/sampler_gl.h" |
37 | 37 |
38 namespace o3d { | 38 namespace o3d { |
39 namespace command_buffer { | 39 namespace command_buffer { |
40 | 40 |
41 namespace { | 41 namespace { |
42 | 42 |
43 // Gets the GL enum corresponding to an addressing mode. | 43 // Gets the GL enum corresponding to an addressing mode. |
44 GLenum GLAddressMode(sampler::AddressingMode o3d_mode) { | 44 GLenum GLAddressMode(sampler::AddressingMode o3d_mode) { |
45 switch (o3d_mode) { | 45 switch (o3d_mode) { |
46 case sampler::WRAP: | 46 case sampler::kWrap: |
47 return GL_REPEAT; | 47 return GL_REPEAT; |
48 case sampler::MIRROR_REPEAT: | 48 case sampler::kMirrorRepeat: |
49 return GL_MIRRORED_REPEAT; | 49 return GL_MIRRORED_REPEAT; |
50 case sampler::CLAMP_TO_EDGE: | 50 case sampler::kClampToEdge: |
51 return GL_CLAMP_TO_EDGE; | 51 return GL_CLAMP_TO_EDGE; |
52 case sampler::CLAMP_TO_BORDER: | 52 case sampler::kClampToBorder: |
53 return GL_CLAMP_TO_BORDER; | 53 return GL_CLAMP_TO_BORDER; |
54 default: | 54 default: |
55 DLOG(FATAL) << "Not Reached"; | 55 DLOG(FATAL) << "Not Reached"; |
56 return GL_REPEAT; | 56 return GL_REPEAT; |
57 } | 57 } |
58 } | 58 } |
59 | 59 |
60 // Gets the GL enum for the minification filter based on the command buffer min | 60 // Gets the GL enum for the minification filter based on the command buffer min |
61 // and mip filtering modes. | 61 // and mip filtering modes. |
62 GLenum GLMinFilter(sampler::FilteringMode min_filter, | 62 GLenum GLMinFilter(sampler::FilteringMode min_filter, |
63 sampler::FilteringMode mip_filter) { | 63 sampler::FilteringMode mip_filter) { |
64 switch (min_filter) { | 64 switch (min_filter) { |
65 case sampler::POINT: | 65 case sampler::kPoint: |
66 if (mip_filter == sampler::NONE) | 66 if (mip_filter == sampler::kNone) |
67 return GL_NEAREST; | 67 return GL_NEAREST; |
68 else if (mip_filter == sampler::POINT) | 68 else if (mip_filter == sampler::kPoint) |
69 return GL_NEAREST_MIPMAP_NEAREST; | 69 return GL_NEAREST_MIPMAP_NEAREST; |
70 else if (mip_filter == sampler::LINEAR) | 70 else if (mip_filter == sampler::kLinear) |
71 return GL_NEAREST_MIPMAP_LINEAR; | 71 return GL_NEAREST_MIPMAP_LINEAR; |
72 case sampler::LINEAR: | 72 case sampler::kLinear: |
73 if (mip_filter == sampler::NONE) | 73 if (mip_filter == sampler::kNone) |
74 return GL_LINEAR; | 74 return GL_LINEAR; |
75 else if (mip_filter == sampler::POINT) | 75 else if (mip_filter == sampler::kPoint) |
76 return GL_LINEAR_MIPMAP_NEAREST; | 76 return GL_LINEAR_MIPMAP_NEAREST; |
77 else if (mip_filter == sampler::LINEAR) | 77 else if (mip_filter == sampler::kLinear) |
78 return GL_LINEAR_MIPMAP_LINEAR; | 78 return GL_LINEAR_MIPMAP_LINEAR; |
79 default: | 79 default: |
80 DLOG(FATAL) << "Not Reached"; | 80 DLOG(FATAL) << "Not Reached"; |
81 return GL_LINEAR_MIPMAP_NEAREST; | 81 return GL_LINEAR_MIPMAP_NEAREST; |
82 } | 82 } |
83 } | 83 } |
84 | 84 |
85 // Gets the GL enum for the magnification filter based on the command buffer mag | 85 // Gets the GL enum for the magnification filter based on the command buffer mag |
86 // filtering mode. | 86 // filtering mode. |
87 GLenum GLMagFilter(sampler::FilteringMode mag_filter) { | 87 GLenum GLMagFilter(sampler::FilteringMode mag_filter) { |
88 switch (mag_filter) { | 88 switch (mag_filter) { |
89 case sampler::POINT: | 89 case sampler::kPoint: |
90 return GL_NEAREST; | 90 return GL_NEAREST; |
91 case sampler::LINEAR: | 91 case sampler::kLinear: |
92 return GL_LINEAR; | 92 return GL_LINEAR; |
93 default: | 93 default: |
94 DLOG(FATAL) << "Not Reached"; | 94 DLOG(FATAL) << "Not Reached"; |
95 return GL_LINEAR; | 95 return GL_LINEAR; |
96 } | 96 } |
97 } | 97 } |
98 | 98 |
99 // Gets the GL enum representing the GL target based on the texture type. | 99 // Gets the GL enum representing the GL target based on the texture type. |
100 GLenum GLTextureTarget(texture::Type type) { | 100 GLenum GLTextureTarget(texture::Type type) { |
101 switch (type) { | 101 switch (type) { |
102 case texture::TEXTURE_2D: | 102 case texture::kTexture2d: |
103 return GL_TEXTURE_2D; | 103 return GL_TEXTURE_2D; |
104 case texture::TEXTURE_3D: | 104 case texture::kTexture3d: |
105 return GL_TEXTURE_3D; | 105 return GL_TEXTURE_3D; |
106 case texture::TEXTURE_CUBE: | 106 case texture::kTextureCube: |
107 return GL_TEXTURE_CUBE_MAP; | 107 return GL_TEXTURE_CUBE_MAP; |
108 default: | 108 default: |
109 DLOG(FATAL) << "Not Reached"; | 109 DLOG(FATAL) << "Not Reached"; |
110 return GL_TEXTURE_2D; | 110 return GL_TEXTURE_2D; |
111 } | 111 } |
112 } | 112 } |
113 | 113 |
114 } // anonymous namespace | 114 } // anonymous namespace |
115 | 115 |
116 SamplerGL::SamplerGL() | 116 SamplerGL::SamplerGL() |
117 : texture_id_(kInvalidResource), | 117 : texture_id_(kInvalidResource), |
118 gl_texture_(0) { | 118 gl_texture_(0) { |
119 SetStates(sampler::CLAMP_TO_EDGE, | 119 SetStates(sampler::kClampToEdge, |
120 sampler::CLAMP_TO_EDGE, | 120 sampler::kClampToEdge, |
121 sampler::CLAMP_TO_EDGE, | 121 sampler::kClampToEdge, |
122 sampler::LINEAR, | 122 sampler::kLinear, |
123 sampler::LINEAR, | 123 sampler::kLinear, |
124 sampler::POINT, | 124 sampler::kPoint, |
125 1); | 125 1); |
126 RGBA black = {0, 0, 0, 1}; | 126 RGBA black = {0, 0, 0, 1}; |
127 SetBorderColor(black); | 127 SetBorderColor(black); |
128 } | 128 } |
129 | 129 |
130 bool SamplerGL::ApplyStates(GAPIGL *gapi) { | 130 bool SamplerGL::ApplyStates(GAPIGL *gapi) { |
131 DCHECK(gapi); | 131 DCHECK(gapi); |
132 TextureGL *texture = gapi->GetTexture(texture_id_); | 132 TextureGL *texture = gapi->GetTexture(texture_id_); |
133 if (!texture) { | 133 if (!texture) { |
134 gl_texture_ = 0; | 134 gl_texture_ = 0; |
(...skipping 13 matching lines...) Expand all Loading... |
148 } | 148 } |
149 | 149 |
150 void SamplerGL::SetStates(sampler::AddressingMode addressing_u, | 150 void SamplerGL::SetStates(sampler::AddressingMode addressing_u, |
151 sampler::AddressingMode addressing_v, | 151 sampler::AddressingMode addressing_v, |
152 sampler::AddressingMode addressing_w, | 152 sampler::AddressingMode addressing_w, |
153 sampler::FilteringMode mag_filter, | 153 sampler::FilteringMode mag_filter, |
154 sampler::FilteringMode min_filter, | 154 sampler::FilteringMode min_filter, |
155 sampler::FilteringMode mip_filter, | 155 sampler::FilteringMode mip_filter, |
156 unsigned int max_anisotropy) { | 156 unsigned int max_anisotropy) { |
157 // These are validated in GAPIDecoder.cc | 157 // These are validated in GAPIDecoder.cc |
158 DCHECK_NE(mag_filter, sampler::NONE); | 158 DCHECK_NE(mag_filter, sampler::kNone); |
159 DCHECK_NE(min_filter, sampler::NONE); | 159 DCHECK_NE(min_filter, sampler::kNone); |
160 DCHECK_GT(max_anisotropy, 0); | 160 DCHECK_GT(max_anisotropy, 0); |
161 gl_wrap_s_ = GLAddressMode(addressing_u); | 161 gl_wrap_s_ = GLAddressMode(addressing_u); |
162 gl_wrap_t_ = GLAddressMode(addressing_v); | 162 gl_wrap_t_ = GLAddressMode(addressing_v); |
163 gl_wrap_r_ = GLAddressMode(addressing_w); | 163 gl_wrap_r_ = GLAddressMode(addressing_w); |
164 gl_mag_filter_ = GLMagFilter(mag_filter); | 164 gl_mag_filter_ = GLMagFilter(mag_filter); |
165 gl_min_filter_ = GLMinFilter(min_filter, mip_filter); | 165 gl_min_filter_ = GLMinFilter(min_filter, mip_filter); |
166 gl_max_anisotropy_ = max_anisotropy; | 166 gl_max_anisotropy_ = max_anisotropy; |
167 } | 167 } |
168 | 168 |
169 void SamplerGL::SetBorderColor(const RGBA &color) { | 169 void SamplerGL::SetBorderColor(const RGBA &color) { |
170 gl_border_color_[0] = color.red; | 170 gl_border_color_[0] = color.red; |
171 gl_border_color_[1] = color.green; | 171 gl_border_color_[1] = color.green; |
172 gl_border_color_[2] = color.blue; | 172 gl_border_color_[2] = color.blue; |
173 gl_border_color_[3] = color.alpha; | 173 gl_border_color_[3] = color.alpha; |
174 } | 174 } |
175 | 175 |
176 BufferSyncInterface::ParseError GAPIGL::CreateSampler( | 176 BufferSyncInterface::ParseError GAPIGL::CreateSampler( |
177 ResourceID id) { | 177 ResourceId id) { |
178 // Dirty effect, because this sampler id may be used. | 178 // Dirty effect, because this sampler id may be used. |
179 DirtyEffect(); | 179 DirtyEffect(); |
180 samplers_.Assign(id, new SamplerGL()); | 180 samplers_.Assign(id, new SamplerGL()); |
181 return BufferSyncInterface::kParseNoError; | 181 return BufferSyncInterface::kParseNoError; |
182 } | 182 } |
183 | 183 |
184 // Destroys the Sampler resource. | 184 // Destroys the Sampler resource. |
185 BufferSyncInterface::ParseError GAPIGL::DestroySampler(ResourceID id) { | 185 BufferSyncInterface::ParseError GAPIGL::DestroySampler(ResourceId id) { |
186 // Dirty effect, because this sampler id may be used. | 186 // Dirty effect, because this sampler id may be used. |
187 DirtyEffect(); | 187 DirtyEffect(); |
188 return samplers_.Destroy(id) ? | 188 return samplers_.Destroy(id) ? |
189 BufferSyncInterface::kParseNoError : | 189 BufferSyncInterface::kParseNoError : |
190 BufferSyncInterface::kParseInvalidArguments; | 190 BufferSyncInterface::kParseInvalidArguments; |
191 } | 191 } |
192 | 192 |
193 BufferSyncInterface::ParseError GAPIGL::SetSamplerStates( | 193 BufferSyncInterface::ParseError GAPIGL::SetSamplerStates( |
194 ResourceID id, | 194 ResourceId id, |
195 sampler::AddressingMode addressing_u, | 195 sampler::AddressingMode addressing_u, |
196 sampler::AddressingMode addressing_v, | 196 sampler::AddressingMode addressing_v, |
197 sampler::AddressingMode addressing_w, | 197 sampler::AddressingMode addressing_w, |
198 sampler::FilteringMode mag_filter, | 198 sampler::FilteringMode mag_filter, |
199 sampler::FilteringMode min_filter, | 199 sampler::FilteringMode min_filter, |
200 sampler::FilteringMode mip_filter, | 200 sampler::FilteringMode mip_filter, |
201 unsigned int max_anisotropy) { | 201 unsigned int max_anisotropy) { |
202 SamplerGL *sampler = samplers_.Get(id); | 202 SamplerGL *sampler = samplers_.Get(id); |
203 if (!sampler) | 203 if (!sampler) |
204 return BufferSyncInterface::kParseInvalidArguments; | 204 return BufferSyncInterface::kParseInvalidArguments; |
205 // Dirty effect, because this sampler id may be used. | 205 // Dirty effect, because this sampler id may be used. |
206 DirtyEffect(); | 206 DirtyEffect(); |
207 sampler->SetStates(addressing_u, addressing_v, addressing_w, | 207 sampler->SetStates(addressing_u, addressing_v, addressing_w, |
208 mag_filter, min_filter, mip_filter, max_anisotropy); | 208 mag_filter, min_filter, mip_filter, max_anisotropy); |
209 return BufferSyncInterface::kParseNoError; | 209 return BufferSyncInterface::kParseNoError; |
210 } | 210 } |
211 | 211 |
212 BufferSyncInterface::ParseError GAPIGL::SetSamplerBorderColor( | 212 BufferSyncInterface::ParseError GAPIGL::SetSamplerBorderColor( |
213 ResourceID id, | 213 ResourceId id, |
214 const RGBA &color) { | 214 const RGBA &color) { |
215 SamplerGL *sampler = samplers_.Get(id); | 215 SamplerGL *sampler = samplers_.Get(id); |
216 if (!sampler) | 216 if (!sampler) |
217 return BufferSyncInterface::kParseInvalidArguments; | 217 return BufferSyncInterface::kParseInvalidArguments; |
218 // Dirty effect, because this sampler id may be used. | 218 // Dirty effect, because this sampler id may be used. |
219 DirtyEffect(); | 219 DirtyEffect(); |
220 sampler->SetBorderColor(color); | 220 sampler->SetBorderColor(color); |
221 return BufferSyncInterface::kParseNoError; | 221 return BufferSyncInterface::kParseNoError; |
222 } | 222 } |
223 | 223 |
224 BufferSyncInterface::ParseError GAPIGL::SetSamplerTexture( | 224 BufferSyncInterface::ParseError GAPIGL::SetSamplerTexture( |
225 ResourceID id, | 225 ResourceId id, |
226 ResourceID texture_id) { | 226 ResourceId texture_id) { |
227 SamplerGL *sampler = samplers_.Get(id); | 227 SamplerGL *sampler = samplers_.Get(id); |
228 if (!sampler) | 228 if (!sampler) |
229 return BufferSyncInterface::kParseInvalidArguments; | 229 return BufferSyncInterface::kParseInvalidArguments; |
230 // Dirty effect, because this sampler id may be used. | 230 // Dirty effect, because this sampler id may be used. |
231 DirtyEffect(); | 231 DirtyEffect(); |
232 sampler->SetTexture(texture_id); | 232 sampler->SetTexture(texture_id); |
233 return BufferSyncInterface::kParseNoError; | 233 return BufferSyncInterface::kParseNoError; |
234 } | 234 } |
235 | 235 |
236 | 236 |
237 } // namespace command_buffer | 237 } // namespace command_buffer |
238 } // namespace o3d | 238 } // namespace o3d |
OLD | NEW |