OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "modules/webgl/WebGL2RenderingContextBase.h" | 6 #include "modules/webgl/WebGL2RenderingContextBase.h" |
7 | 7 |
8 #include "bindings/modules/v8/WebGLAny.h" | 8 #include "bindings/modules/v8/WebGLAny.h" |
9 #include "core/html/HTMLCanvasElement.h" | 9 #include "core/html/HTMLCanvasElement.h" |
10 #include "core/html/HTMLImageElement.h" | 10 #include "core/html/HTMLImageElement.h" |
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1287 { | 1287 { |
1288 if (isContextLost()) | 1288 if (isContextLost()) |
1289 return nullptr; | 1289 return nullptr; |
1290 WebGLSampler* o = WebGLSampler::create(this); | 1290 WebGLSampler* o = WebGLSampler::create(this); |
1291 addSharedObject(o); | 1291 addSharedObject(o); |
1292 return o; | 1292 return o; |
1293 } | 1293 } |
1294 | 1294 |
1295 void WebGL2RenderingContextBase::deleteSampler(WebGLSampler* sampler) | 1295 void WebGL2RenderingContextBase::deleteSampler(WebGLSampler* sampler) |
1296 { | 1296 { |
| 1297 if (isContextLost()) |
| 1298 return; |
| 1299 |
1297 for (size_t i = 0; i < m_samplerUnits.size(); ++i) { | 1300 for (size_t i = 0; i < m_samplerUnits.size(); ++i) { |
1298 if (sampler == m_samplerUnits[i]) { | 1301 if (sampler == m_samplerUnits[i]) { |
1299 m_samplerUnits[i] = nullptr; | 1302 m_samplerUnits[i] = nullptr; |
1300 webContext()->bindSampler(i, 0); | 1303 webContext()->bindSampler(i, 0); |
1301 } | 1304 } |
1302 } | 1305 } |
1303 | 1306 |
1304 deleteObject(sampler); | 1307 deleteObject(sampler); |
1305 } | 1308 } |
1306 | 1309 |
1307 GLboolean WebGL2RenderingContextBase::isSampler(WebGLSampler* sampler) | 1310 GLboolean WebGL2RenderingContextBase::isSampler(WebGLSampler* sampler) |
1308 { | 1311 { |
1309 if (isContextLost() || !sampler) | 1312 if (isContextLost() || !sampler) |
1310 return 0; | 1313 return 0; |
1311 | 1314 |
1312 return webContext()->isSampler(sampler->object()); | 1315 return webContext()->isSampler(sampler->object()); |
1313 } | 1316 } |
1314 | 1317 |
1315 void WebGL2RenderingContextBase::bindSampler(GLuint unit, WebGLSampler* sampler) | 1318 void WebGL2RenderingContextBase::bindSampler(GLuint unit, WebGLSampler* sampler) |
1316 { | 1319 { |
| 1320 if (isContextLost()) |
| 1321 return; |
| 1322 |
1317 bool deleted; | 1323 bool deleted; |
1318 if (!checkObjectToBeBound("bindSampler", sampler, deleted)) | 1324 if (!checkObjectToBeBound("bindSampler", sampler, deleted)) |
1319 return; | 1325 return; |
1320 if (deleted) { | 1326 if (deleted) { |
1321 synthesizeGLError(GL_INVALID_OPERATION, "bindSampler", "attempted to bin
d a deleted sampler"); | 1327 synthesizeGLError(GL_INVALID_OPERATION, "bindSampler", "attempted to bin
d a deleted sampler"); |
1322 return; | 1328 return; |
1323 } | 1329 } |
1324 | 1330 |
1325 if (unit >= m_samplerUnits.size()) { | 1331 if (unit >= m_samplerUnits.size()) { |
1326 synthesizeGLError(GL_INVALID_VALUE, "bindSampler", "texture unit out of
range"); | 1332 synthesizeGLError(GL_INVALID_VALUE, "bindSampler", "texture unit out of
range"); |
1327 return; | 1333 return; |
1328 } | 1334 } |
1329 | 1335 |
1330 m_samplerUnits[unit] = sampler; | 1336 m_samplerUnits[unit] = sampler; |
1331 | 1337 |
1332 webContext()->bindSampler(unit, objectOrZero(sampler)); | 1338 webContext()->bindSampler(unit, objectOrZero(sampler)); |
1333 } | 1339 } |
1334 | 1340 |
| 1341 void WebGL2RenderingContextBase::samplerParameter(WebGLSampler* sampler, GLenum
pname, GLfloat paramf, GLint parami, bool isFloat) |
| 1342 { |
| 1343 if (isContextLost() || !validateWebGLObject("samplerParameter", sampler)) |
| 1344 return; |
| 1345 |
| 1346 switch (pname) { |
| 1347 case GL_TEXTURE_COMPARE_FUNC: |
| 1348 case GL_TEXTURE_COMPARE_MODE: |
| 1349 case GL_TEXTURE_MAG_FILTER: |
| 1350 case GL_TEXTURE_MIN_FILTER: |
| 1351 case GL_TEXTURE_WRAP_R: |
| 1352 case GL_TEXTURE_WRAP_S: |
| 1353 case GL_TEXTURE_WRAP_T: |
| 1354 case GL_TEXTURE_MAX_LOD: |
| 1355 case GL_TEXTURE_MIN_LOD: |
| 1356 break; |
| 1357 default: |
| 1358 synthesizeGLError(GL_INVALID_ENUM, "samplerParameter", "invalid paramete
r name"); |
| 1359 return; |
| 1360 } |
| 1361 |
| 1362 if (isFloat) { |
| 1363 webContext()->samplerParameterf(objectOrZero(sampler), pname, paramf); |
| 1364 } else { |
| 1365 webContext()->samplerParameteri(objectOrZero(sampler), pname, parami); |
| 1366 } |
| 1367 } |
| 1368 |
1335 void WebGL2RenderingContextBase::samplerParameteri(WebGLSampler* sampler, GLenum
pname, GLint param) | 1369 void WebGL2RenderingContextBase::samplerParameteri(WebGLSampler* sampler, GLenum
pname, GLint param) |
1336 { | 1370 { |
1337 if (isContextLost() || !validateWebGLObject("samplerParameteri", sampler)) | 1371 samplerParameter(sampler, pname, 0, param, false); |
1338 return; | |
1339 | |
1340 webContext()->samplerParameteri(objectOrZero(sampler), pname, param); | |
1341 } | 1372 } |
1342 | 1373 |
1343 void WebGL2RenderingContextBase::samplerParameterf(WebGLSampler* sampler, GLenum
pname, GLfloat param) | 1374 void WebGL2RenderingContextBase::samplerParameterf(WebGLSampler* sampler, GLenum
pname, GLfloat param) |
1344 { | 1375 { |
1345 if (isContextLost() || !validateWebGLObject("samplerParameterf", sampler)) | 1376 samplerParameter(sampler, pname, param, 0, true); |
1346 return; | |
1347 | |
1348 webContext()->samplerParameterf(objectOrZero(sampler), pname, param); | |
1349 } | 1377 } |
1350 | 1378 |
1351 ScriptValue WebGL2RenderingContextBase::getSamplerParameter(ScriptState* scriptS
tate, WebGLSampler* sampler, GLenum pname) | 1379 ScriptValue WebGL2RenderingContextBase::getSamplerParameter(ScriptState* scriptS
tate, WebGLSampler* sampler, GLenum pname) |
1352 { | 1380 { |
1353 if (isContextLost() || !validateWebGLObject("getSamplerParameter", sampler)) | 1381 if (isContextLost() || !validateWebGLObject("getSamplerParameter", sampler)) |
1354 return ScriptValue::createNull(scriptState); | 1382 return ScriptValue::createNull(scriptState); |
1355 | 1383 |
1356 switch (pname) { | 1384 switch (pname) { |
1357 case GL_TEXTURE_COMPARE_FUNC: | 1385 case GL_TEXTURE_COMPARE_FUNC: |
1358 case GL_TEXTURE_COMPARE_MODE: | 1386 case GL_TEXTURE_COMPARE_MODE: |
(...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2443 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() | 2471 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() |
2444 { | 2472 { |
2445 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) | 2473 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) |
2446 return m_readFramebufferBinding->colorBufferFormat(); | 2474 return m_readFramebufferBinding->colorBufferFormat(); |
2447 if (m_requestedAttributes.alpha()) | 2475 if (m_requestedAttributes.alpha()) |
2448 return GL_RGBA; | 2476 return GL_RGBA; |
2449 return GL_RGB; | 2477 return GL_RGB; |
2450 } | 2478 } |
2451 | 2479 |
2452 } // namespace blink | 2480 } // namespace blink |
OLD | NEW |