| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 #include "core/html/canvas/WebGLUniformLocation.h" | 67 #include "core/html/canvas/WebGLUniformLocation.h" |
| 68 #include "core/inspector/InspectorInstrumentation.h" | 68 #include "core/inspector/InspectorInstrumentation.h" |
| 69 #include "core/loader/FrameLoader.h" | 69 #include "core/loader/FrameLoader.h" |
| 70 #include "core/loader/FrameLoaderClient.h" | 70 #include "core/loader/FrameLoaderClient.h" |
| 71 #include "core/frame/Frame.h" | 71 #include "core/frame/Frame.h" |
| 72 #include "core/frame/Settings.h" | 72 #include "core/frame/Settings.h" |
| 73 #include "core/rendering/RenderBox.h" | 73 #include "core/rendering/RenderBox.h" |
| 74 #include "platform/CheckedInt.h" | 74 #include "platform/CheckedInt.h" |
| 75 #include "platform/NotImplemented.h" | 75 #include "platform/NotImplemented.h" |
| 76 #include "platform/geometry/IntSize.h" | 76 #include "platform/geometry/IntSize.h" |
| 77 #include "platform/graphics/Extensions3D.h" | |
| 78 #include "platform/graphics/UnacceleratedImageBufferSurface.h" | 77 #include "platform/graphics/UnacceleratedImageBufferSurface.h" |
| 79 #include "platform/graphics/gpu/DrawingBuffer.h" | 78 #include "platform/graphics/gpu/DrawingBuffer.h" |
| 80 #include "public/platform/Platform.h" | 79 #include "public/platform/Platform.h" |
| 81 | 80 |
| 82 #include "wtf/PassOwnPtr.h" | 81 #include "wtf/PassOwnPtr.h" |
| 83 #include "wtf/Uint32Array.h" | 82 #include "wtf/Uint32Array.h" |
| 84 #include "wtf/text/StringBuilder.h" | 83 #include "wtf/text/StringBuilder.h" |
| 85 | 84 |
| 86 namespace WebCore { | 85 namespace WebCore { |
| 87 | 86 |
| (...skipping 2342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2430 case GC3D_UNPACK_PREMULTIPLY_ALPHA_WEBGL: | 2429 case GC3D_UNPACK_PREMULTIPLY_ALPHA_WEBGL: |
| 2431 return WebGLGetInfo(m_unpackPremultiplyAlpha); | 2430 return WebGLGetInfo(m_unpackPremultiplyAlpha); |
| 2432 case GC3D_UNPACK_COLORSPACE_CONVERSION_WEBGL: | 2431 case GC3D_UNPACK_COLORSPACE_CONVERSION_WEBGL: |
| 2433 return WebGLGetInfo(m_unpackColorspaceConversion); | 2432 return WebGLGetInfo(m_unpackColorspaceConversion); |
| 2434 case GL_VENDOR: | 2433 case GL_VENDOR: |
| 2435 return WebGLGetInfo(String("WebKit")); | 2434 return WebGLGetInfo(String("WebKit")); |
| 2436 case GL_VERSION: | 2435 case GL_VERSION: |
| 2437 return WebGLGetInfo("WebGL 1.0 (" + m_contextSupport->getString(GL_VERSI
ON) + ")"); | 2436 return WebGLGetInfo("WebGL 1.0 (" + m_contextSupport->getString(GL_VERSI
ON) + ")"); |
| 2438 case GL_VIEWPORT: | 2437 case GL_VIEWPORT: |
| 2439 return getWebGLIntArrayParameter(pname); | 2438 return getWebGLIntArrayParameter(pname); |
| 2440 case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_deri
vatives | 2439 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_derivatives |
| 2441 if (m_oesStandardDerivatives) | 2440 if (m_oesStandardDerivatives) |
| 2442 return getUnsignedIntParameter(Extensions3D::FRAGMENT_SHADER_DERIVAT
IVE_HINT_OES); | 2441 return getUnsignedIntParameter(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OE
S); |
| 2443 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_standard_derivatives not enabled"); | 2442 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_standard_derivatives not enabled"); |
| 2444 return WebGLGetInfo(); | 2443 return WebGLGetInfo(); |
| 2445 case WebGLDebugRendererInfo::UNMASKED_RENDERER_WEBGL: | 2444 case WebGLDebugRendererInfo::UNMASKED_RENDERER_WEBGL: |
| 2446 if (m_webglDebugRendererInfo) | 2445 if (m_webglDebugRendererInfo) |
| 2447 return WebGLGetInfo(m_contextSupport->getString(GL_RENDERER)); | 2446 return WebGLGetInfo(m_contextSupport->getString(GL_RENDERER)); |
| 2448 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); | 2447 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); |
| 2449 return WebGLGetInfo(); | 2448 return WebGLGetInfo(); |
| 2450 case WebGLDebugRendererInfo::UNMASKED_VENDOR_WEBGL: | 2449 case WebGLDebugRendererInfo::UNMASKED_VENDOR_WEBGL: |
| 2451 if (m_webglDebugRendererInfo) | 2450 if (m_webglDebugRendererInfo) |
| 2452 return WebGLGetInfo(m_contextSupport->getString(GL_VENDOR)); | 2451 return WebGLGetInfo(m_contextSupport->getString(GL_VENDOR)); |
| 2453 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); | 2452 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); |
| 2454 return WebGLGetInfo(); | 2453 return WebGLGetInfo(); |
| 2455 case Extensions3D::VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object | 2454 case GL_VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object |
| 2456 if (m_oesVertexArrayObject) { | 2455 if (m_oesVertexArrayObject) { |
| 2457 if (!m_boundVertexArrayObject->isDefaultObject()) | 2456 if (!m_boundVertexArrayObject->isDefaultObject()) |
| 2458 return WebGLGetInfo(PassRefPtr<WebGLVertexArrayObjectOES>(m_boun
dVertexArrayObject)); | 2457 return WebGLGetInfo(PassRefPtr<WebGLVertexArrayObjectOES>(m_boun
dVertexArrayObject)); |
| 2459 return WebGLGetInfo(); | 2458 return WebGLGetInfo(); |
| 2460 } | 2459 } |
| 2461 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_vertex_array_object not enabled"); | 2460 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_vertex_array_object not enabled"); |
| 2462 return WebGLGetInfo(); | 2461 return WebGLGetInfo(); |
| 2463 case Extensions3D::MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_ani
sotropic | 2462 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic |
| 2464 if (m_extTextureFilterAnisotropic) | 2463 if (m_extTextureFilterAnisotropic) |
| 2465 return getUnsignedIntParameter(Extensions3D::MAX_TEXTURE_MAX_ANISOTR
OPY_EXT); | 2464 return getUnsignedIntParameter(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT); |
| 2466 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, EXT_texture_filter_anisotropic not enabled"); | 2465 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, EXT_texture_filter_anisotropic not enabled"); |
| 2467 return WebGLGetInfo(); | 2466 return WebGLGetInfo(); |
| 2468 case Extensions3D::MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN | 2467 case GL_MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN |
| 2469 if (m_webglDrawBuffers) | 2468 if (m_webglDrawBuffers) |
| 2470 return WebGLGetInfo(maxColorAttachments()); | 2469 return WebGLGetInfo(maxColorAttachments()); |
| 2471 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); | 2470 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); |
| 2472 return WebGLGetInfo(); | 2471 return WebGLGetInfo(); |
| 2473 case Extensions3D::MAX_DRAW_BUFFERS_EXT: | 2472 case GL_MAX_DRAW_BUFFERS_EXT: |
| 2474 if (m_webglDrawBuffers) | 2473 if (m_webglDrawBuffers) |
| 2475 return WebGLGetInfo(maxDrawBuffers()); | 2474 return WebGLGetInfo(maxDrawBuffers()); |
| 2476 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); | 2475 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); |
| 2477 return WebGLGetInfo(); | 2476 return WebGLGetInfo(); |
| 2478 default: | 2477 default: |
| 2479 if (m_webglDrawBuffers | 2478 if (m_webglDrawBuffers |
| 2480 && pname >= Extensions3D::DRAW_BUFFER0_EXT | 2479 && pname >= GL_DRAW_BUFFER0_EXT |
| 2481 && pname < static_cast<GLenum>(Extensions3D::DRAW_BUFFER0_EXT + maxD
rawBuffers())) { | 2480 && pname < static_cast<GLenum>(GL_DRAW_BUFFER0_EXT + maxDrawBuffers(
))) { |
| 2482 GLint value = GL_NONE; | 2481 GLint value = GL_NONE; |
| 2483 if (m_framebufferBinding) | 2482 if (m_framebufferBinding) |
| 2484 value = m_framebufferBinding->getDrawBuffer(pname); | 2483 value = m_framebufferBinding->getDrawBuffer(pname); |
| 2485 else // emulated backbuffer | 2484 else // emulated backbuffer |
| 2486 value = m_backDrawBuffer; | 2485 value = m_backDrawBuffer; |
| 2487 return WebGLGetInfo(value); | 2486 return WebGLGetInfo(value); |
| 2488 } | 2487 } |
| 2489 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me"); | 2488 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me"); |
| 2490 return WebGLGetInfo(); | 2489 return WebGLGetInfo(); |
| 2491 } | 2490 } |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2664 if (!tex) | 2663 if (!tex) |
| 2665 return WebGLGetInfo(); | 2664 return WebGLGetInfo(); |
| 2666 GLint value = 0; | 2665 GLint value = 0; |
| 2667 switch (pname) { | 2666 switch (pname) { |
| 2668 case GL_TEXTURE_MAG_FILTER: | 2667 case GL_TEXTURE_MAG_FILTER: |
| 2669 case GL_TEXTURE_MIN_FILTER: | 2668 case GL_TEXTURE_MIN_FILTER: |
| 2670 case GL_TEXTURE_WRAP_S: | 2669 case GL_TEXTURE_WRAP_S: |
| 2671 case GL_TEXTURE_WRAP_T: | 2670 case GL_TEXTURE_WRAP_T: |
| 2672 m_context->getTexParameteriv(target, pname, &value); | 2671 m_context->getTexParameteriv(target, pname, &value); |
| 2673 return WebGLGetInfo(static_cast<unsigned>(value)); | 2672 return WebGLGetInfo(static_cast<unsigned>(value)); |
| 2674 case Extensions3D::TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotr
opic | 2673 case GL_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic |
| 2675 if (m_extTextureFilterAnisotropic) { | 2674 if (m_extTextureFilterAnisotropic) { |
| 2676 m_context->getTexParameteriv(target, pname, &value); | 2675 m_context->getTexParameteriv(target, pname, &value); |
| 2677 return WebGLGetInfo(static_cast<unsigned>(value)); | 2676 return WebGLGetInfo(static_cast<unsigned>(value)); |
| 2678 } | 2677 } |
| 2679 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name, EXT_texture_filter_anisotropic not enabled"); | 2678 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name, EXT_texture_filter_anisotropic not enabled"); |
| 2680 return WebGLGetInfo(); | 2679 return WebGLGetInfo(); |
| 2681 default: | 2680 default: |
| 2682 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name"); | 2681 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name"); |
| 2683 return WebGLGetInfo(); | 2682 return WebGLGetInfo(); |
| 2684 } | 2683 } |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2850 WebGLGetInfo WebGLRenderingContext::getVertexAttrib(GLuint index, GLenum pname) | 2849 WebGLGetInfo WebGLRenderingContext::getVertexAttrib(GLuint index, GLenum pname) |
| 2851 { | 2850 { |
| 2852 if (isContextLost()) | 2851 if (isContextLost()) |
| 2853 return WebGLGetInfo(); | 2852 return WebGLGetInfo(); |
| 2854 if (index >= m_maxVertexAttribs) { | 2853 if (index >= m_maxVertexAttribs) { |
| 2855 synthesizeGLError(GL_INVALID_VALUE, "getVertexAttrib", "index out of ran
ge"); | 2854 synthesizeGLError(GL_INVALID_VALUE, "getVertexAttrib", "index out of ran
ge"); |
| 2856 return WebGLGetInfo(); | 2855 return WebGLGetInfo(); |
| 2857 } | 2856 } |
| 2858 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArr
ayObject->getVertexAttribState(index); | 2857 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArr
ayObject->getVertexAttribState(index); |
| 2859 | 2858 |
| 2860 if (m_angleInstancedArrays && pname == Extensions3D::VERTEX_ATTRIB_ARRAY_DIV
ISOR_ANGLE) | 2859 if (m_angleInstancedArrays && pname == GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE) |
| 2861 return WebGLGetInfo(state.divisor); | 2860 return WebGLGetInfo(state.divisor); |
| 2862 | 2861 |
| 2863 switch (pname) { | 2862 switch (pname) { |
| 2864 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: | 2863 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: |
| 2865 if (!state.bufferBinding || !state.bufferBinding->object()) | 2864 if (!state.bufferBinding || !state.bufferBinding->object()) |
| 2866 return WebGLGetInfo(); | 2865 return WebGLGetInfo(); |
| 2867 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(state.bufferBinding)); | 2866 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(state.bufferBinding)); |
| 2868 case GL_VERTEX_ATTRIB_ARRAY_ENABLED: | 2867 case GL_VERTEX_ATTRIB_ARRAY_ENABLED: |
| 2869 return WebGLGetInfo(state.enabled); | 2868 return WebGLGetInfo(state.enabled); |
| 2870 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: | 2869 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2897 | 2896 |
| 2898 void WebGLRenderingContext::hint(GLenum target, GLenum mode) | 2897 void WebGLRenderingContext::hint(GLenum target, GLenum mode) |
| 2899 { | 2898 { |
| 2900 if (isContextLost()) | 2899 if (isContextLost()) |
| 2901 return; | 2900 return; |
| 2902 bool isValid = false; | 2901 bool isValid = false; |
| 2903 switch (target) { | 2902 switch (target) { |
| 2904 case GL_GENERATE_MIPMAP_HINT: | 2903 case GL_GENERATE_MIPMAP_HINT: |
| 2905 isValid = true; | 2904 isValid = true; |
| 2906 break; | 2905 break; |
| 2907 case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_deri
vatives | 2906 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_derivatives |
| 2908 if (m_oesStandardDerivatives) | 2907 if (m_oesStandardDerivatives) |
| 2909 isValid = true; | 2908 isValid = true; |
| 2910 break; | 2909 break; |
| 2911 } | 2910 } |
| 2912 if (!isValid) { | 2911 if (!isValid) { |
| 2913 synthesizeGLError(GL_INVALID_ENUM, "hint", "invalid target"); | 2912 synthesizeGLError(GL_INVALID_ENUM, "hint", "invalid target"); |
| 2914 return; | 2913 return; |
| 2915 } | 2914 } |
| 2916 m_context->hint(target, mode); | 2915 m_context->hint(target, mode); |
| 2917 } | 2916 } |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3155 case GL_RGB5_A1: | 3154 case GL_RGB5_A1: |
| 3156 case GL_RGB565: | 3155 case GL_RGB565: |
| 3157 case GL_STENCIL_INDEX8: | 3156 case GL_STENCIL_INDEX8: |
| 3158 m_context->renderbufferStorage(target, internalformat, width, height); | 3157 m_context->renderbufferStorage(target, internalformat, width, height); |
| 3159 m_renderbufferBinding->setInternalFormat(internalformat); | 3158 m_renderbufferBinding->setInternalFormat(internalformat); |
| 3160 m_renderbufferBinding->setSize(width, height); | 3159 m_renderbufferBinding->setSize(width, height); |
| 3161 m_renderbufferBinding->deleteEmulatedStencilBuffer(m_contextSupport.get(
)); | 3160 m_renderbufferBinding->deleteEmulatedStencilBuffer(m_contextSupport.get(
)); |
| 3162 break; | 3161 break; |
| 3163 case GL_DEPTH_STENCIL_OES: | 3162 case GL_DEPTH_STENCIL_OES: |
| 3164 if (isDepthStencilSupported()) { | 3163 if (isDepthStencilSupported()) { |
| 3165 m_context->renderbufferStorage(target, Extensions3D::DEPTH24_STENCIL
8, width, height); | 3164 m_context->renderbufferStorage(target, GL_DEPTH24_STENCIL8_OES, widt
h, height); |
| 3166 } else { | 3165 } else { |
| 3167 WebGLRenderbuffer* emulatedStencilBuffer = ensureEmulatedStencilBuff
er(target, m_renderbufferBinding.get()); | 3166 WebGLRenderbuffer* emulatedStencilBuffer = ensureEmulatedStencilBuff
er(target, m_renderbufferBinding.get()); |
| 3168 if (!emulatedStencilBuffer) { | 3167 if (!emulatedStencilBuffer) { |
| 3169 synthesizeGLError(GL_OUT_OF_MEMORY, "renderbufferStorage", "out
of memory"); | 3168 synthesizeGLError(GL_OUT_OF_MEMORY, "renderbufferStorage", "out
of memory"); |
| 3170 return; | 3169 return; |
| 3171 } | 3170 } |
| 3172 m_context->renderbufferStorage(target, GL_DEPTH_COMPONENT16, width,
height); | 3171 m_context->renderbufferStorage(target, GL_DEPTH_COMPONENT16, width,
height); |
| 3173 m_context->bindRenderbuffer(target, objectOrZero(emulatedStencilBuff
er)); | 3172 m_context->bindRenderbuffer(target, objectOrZero(emulatedStencilBuff
er)); |
| 3174 m_context->renderbufferStorage(target, GL_STENCIL_INDEX8, width, hei
ght); | 3173 m_context->renderbufferStorage(target, GL_STENCIL_INDEX8, width, hei
ght); |
| 3175 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi
ng.get())); | 3174 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi
ng.get())); |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3552 case GL_TEXTURE_MAG_FILTER: | 3551 case GL_TEXTURE_MAG_FILTER: |
| 3553 break; | 3552 break; |
| 3554 case GL_TEXTURE_WRAP_S: | 3553 case GL_TEXTURE_WRAP_S: |
| 3555 case GL_TEXTURE_WRAP_T: | 3554 case GL_TEXTURE_WRAP_T: |
| 3556 if ((isFloat && paramf != GL_CLAMP_TO_EDGE && paramf != GL_MIRRORED_REPE
AT && paramf != GL_REPEAT) | 3555 if ((isFloat && paramf != GL_CLAMP_TO_EDGE && paramf != GL_MIRRORED_REPE
AT && paramf != GL_REPEAT) |
| 3557 || (!isFloat && parami != GL_CLAMP_TO_EDGE && parami != GL_MIRRORED_
REPEAT && parami != GL_REPEAT)) { | 3556 || (!isFloat && parami != GL_CLAMP_TO_EDGE && parami != GL_MIRRORED_
REPEAT && parami != GL_REPEAT)) { |
| 3558 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid paramete
r"); | 3557 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid paramete
r"); |
| 3559 return; | 3558 return; |
| 3560 } | 3559 } |
| 3561 break; | 3560 break; |
| 3562 case Extensions3D::TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotr
opic | 3561 case GL_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic |
| 3563 if (!m_extTextureFilterAnisotropic) { | 3562 if (!m_extTextureFilterAnisotropic) { |
| 3564 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid paramete
r, EXT_texture_filter_anisotropic not enabled"); | 3563 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid paramete
r, EXT_texture_filter_anisotropic not enabled"); |
| 3565 return; | 3564 return; |
| 3566 } | 3565 } |
| 3567 break; | 3566 break; |
| 3568 default: | 3567 default: |
| 3569 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid parameter na
me"); | 3568 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid parameter na
me"); |
| 3570 return; | 3569 return; |
| 3571 } | 3570 } |
| 3572 if (isFloat) { | 3571 if (isFloat) { |
| (...skipping 1246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4819 return false; | 4818 return false; |
| 4820 } | 4819 } |
| 4821 if (width < 0 || height < 0) { | 4820 if (width < 0 || height < 0) { |
| 4822 synthesizeGLError(GL_INVALID_VALUE, functionName, "width or height < 0")
; | 4821 synthesizeGLError(GL_INVALID_VALUE, functionName, "width or height < 0")
; |
| 4823 return false; | 4822 return false; |
| 4824 } | 4823 } |
| 4825 | 4824 |
| 4826 unsigned bytesRequired = 0; | 4825 unsigned bytesRequired = 0; |
| 4827 | 4826 |
| 4828 switch (format) { | 4827 switch (format) { |
| 4829 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT: | 4828 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: |
| 4830 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT: | 4829 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: |
| 4831 { | 4830 { |
| 4832 const int kBlockWidth = 4; | 4831 const int kBlockWidth = 4; |
| 4833 const int kBlockHeight = 4; | 4832 const int kBlockHeight = 4; |
| 4834 const int kBlockSize = 8; | 4833 const int kBlockSize = 8; |
| 4835 int numBlocksAcross = (width + kBlockWidth - 1) / kBlockWidth; | 4834 int numBlocksAcross = (width + kBlockWidth - 1) / kBlockWidth; |
| 4836 int numBlocksDown = (height + kBlockHeight - 1) / kBlockHeight; | 4835 int numBlocksDown = (height + kBlockHeight - 1) / kBlockHeight; |
| 4837 int numBlocks = numBlocksAcross * numBlocksDown; | 4836 int numBlocks = numBlocksAcross * numBlocksDown; |
| 4838 bytesRequired = numBlocks * kBlockSize; | 4837 bytesRequired = numBlocks * kBlockSize; |
| 4839 } | 4838 } |
| 4840 break; | 4839 break; |
| 4841 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT: | 4840 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: |
| 4842 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: | 4841 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: |
| 4843 { | 4842 { |
| 4844 const int kBlockWidth = 4; | 4843 const int kBlockWidth = 4; |
| 4845 const int kBlockHeight = 4; | 4844 const int kBlockHeight = 4; |
| 4846 const int kBlockSize = 16; | 4845 const int kBlockSize = 16; |
| 4847 int numBlocksAcross = (width + kBlockWidth - 1) / kBlockWidth; | 4846 int numBlocksAcross = (width + kBlockWidth - 1) / kBlockWidth; |
| 4848 int numBlocksDown = (height + kBlockHeight - 1) / kBlockHeight; | 4847 int numBlocksDown = (height + kBlockHeight - 1) / kBlockHeight; |
| 4849 int numBlocks = numBlocksAcross * numBlocksDown; | 4848 int numBlocks = numBlocksAcross * numBlocksDown; |
| 4850 bytesRequired = numBlocks * kBlockSize; | 4849 bytesRequired = numBlocks * kBlockSize; |
| 4851 } | 4850 } |
| 4852 break; | 4851 break; |
| 4853 case Extensions3D::COMPRESSED_ATC_RGB_AMD: | 4852 case GC3D_COMPRESSED_ATC_RGB_AMD: |
| 4854 { | 4853 { |
| 4855 bytesRequired = floor(static_cast<double>((width + 3) / 4)) * floor(
static_cast<double>((height + 3) / 4)) * 8; | 4854 bytesRequired = floor(static_cast<double>((width + 3) / 4)) * floor(
static_cast<double>((height + 3) / 4)) * 8; |
| 4856 } | 4855 } |
| 4857 break; | 4856 break; |
| 4858 case Extensions3D::COMPRESSED_ATC_RGBA_EXPLICIT_ALPHA_AMD: | 4857 case GC3D_COMPRESSED_ATC_RGBA_EXPLICIT_ALPHA_AMD: |
| 4859 case Extensions3D::COMPRESSED_ATC_RGBA_INTERPOLATED_ALPHA_AMD: | 4858 case GC3D_COMPRESSED_ATC_RGBA_INTERPOLATED_ALPHA_AMD: |
| 4860 { | 4859 { |
| 4861 bytesRequired = floor(static_cast<double>((width + 3) / 4)) * floor(
static_cast<double>((height + 3) / 4)) * 16; | 4860 bytesRequired = floor(static_cast<double>((width + 3) / 4)) * floor(
static_cast<double>((height + 3) / 4)) * 16; |
| 4862 } | 4861 } |
| 4863 break; | 4862 break; |
| 4864 case Extensions3D::COMPRESSED_RGB_PVRTC_4BPPV1_IMG: | 4863 case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: |
| 4865 case Extensions3D::COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: | 4864 case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: |
| 4866 { | 4865 { |
| 4867 bytesRequired = max(width, 8) * max(height, 8) / 2; | 4866 bytesRequired = max(width, 8) * max(height, 8) / 2; |
| 4868 } | 4867 } |
| 4869 break; | 4868 break; |
| 4870 case Extensions3D::COMPRESSED_RGB_PVRTC_2BPPV1_IMG: | 4869 case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG: |
| 4871 case Extensions3D::COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: | 4870 case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: |
| 4872 { | 4871 { |
| 4873 bytesRequired = max(width, 8) * max(height, 8) / 4; | 4872 bytesRequired = max(width, 8) * max(height, 8) / 4; |
| 4874 } | 4873 } |
| 4875 break; | 4874 break; |
| 4876 default: | 4875 default: |
| 4877 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid format"); | 4876 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid format"); |
| 4878 return false; | 4877 return false; |
| 4879 } | 4878 } |
| 4880 | 4879 |
| 4881 if (pixels->byteLength() != bytesRequired) { | 4880 if (pixels->byteLength() != bytesRequired) { |
| 4882 synthesizeGLError(GL_INVALID_VALUE, functionName, "length of ArrayBuffer
View is not correct for dimensions"); | 4881 synthesizeGLError(GL_INVALID_VALUE, functionName, "length of ArrayBuffer
View is not correct for dimensions"); |
| 4883 return false; | 4882 return false; |
| 4884 } | 4883 } |
| 4885 | 4884 |
| 4886 return true; | 4885 return true; |
| 4887 } | 4886 } |
| 4888 | 4887 |
| 4889 bool WebGLRenderingContext::validateCompressedTexDimensions(const char* function
Name, TexFuncValidationFunctionType functionType, GLenum target, GLint level, GL
sizei width, GLsizei height, GLenum format) | 4888 bool WebGLRenderingContext::validateCompressedTexDimensions(const char* function
Name, TexFuncValidationFunctionType functionType, GLenum target, GLint level, GL
sizei width, GLsizei height, GLenum format) |
| 4890 { | 4889 { |
| 4891 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi
dth, height)) | 4890 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi
dth, height)) |
| 4892 return false; | 4891 return false; |
| 4893 | 4892 |
| 4894 switch (format) { | 4893 switch (format) { |
| 4895 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT: | 4894 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: |
| 4896 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT: | 4895 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: |
| 4897 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT: | 4896 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: |
| 4898 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: { | 4897 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: { |
| 4899 const int kBlockWidth = 4; | 4898 const int kBlockWidth = 4; |
| 4900 const int kBlockHeight = 4; | 4899 const int kBlockHeight = 4; |
| 4901 bool widthValid = (level && width == 1) || (level && width == 2) || !(wi
dth % kBlockWidth); | 4900 bool widthValid = (level && width == 1) || (level && width == 2) || !(wi
dth % kBlockWidth); |
| 4902 bool heightValid = (level && height == 1) || (level && height == 2) || !
(height % kBlockHeight); | 4901 bool heightValid = (level && height == 1) || (level && height == 2) || !
(height % kBlockHeight); |
| 4903 if (!widthValid || !heightValid) { | 4902 if (!widthValid || !heightValid) { |
| 4904 synthesizeGLError(GL_INVALID_OPERATION, functionName, "width or heig
ht invalid for level"); | 4903 synthesizeGLError(GL_INVALID_OPERATION, functionName, "width or heig
ht invalid for level"); |
| 4905 return false; | 4904 return false; |
| 4906 } | 4905 } |
| 4907 return true; | 4906 return true; |
| 4908 } | 4907 } |
| 4909 default: | 4908 default: |
| 4910 return false; | 4909 return false; |
| 4911 } | 4910 } |
| 4912 } | 4911 } |
| 4913 | 4912 |
| 4914 bool WebGLRenderingContext::validateCompressedTexSubDimensions(const char* funct
ionName, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width
, GLsizei height, GLenum format, WebGLTexture* tex) | 4913 bool WebGLRenderingContext::validateCompressedTexSubDimensions(const char* funct
ionName, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width
, GLsizei height, GLenum format, WebGLTexture* tex) |
| 4915 { | 4914 { |
| 4916 if (xoffset < 0 || yoffset < 0) { | 4915 if (xoffset < 0 || yoffset < 0) { |
| 4917 synthesizeGLError(GL_INVALID_VALUE, functionName, "xoffset or yoffset <
0"); | 4916 synthesizeGLError(GL_INVALID_VALUE, functionName, "xoffset or yoffset <
0"); |
| 4918 return false; | 4917 return false; |
| 4919 } | 4918 } |
| 4920 | 4919 |
| 4921 switch (format) { | 4920 switch (format) { |
| 4922 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT: | 4921 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: |
| 4923 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT: | 4922 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: |
| 4924 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT: | 4923 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: |
| 4925 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: { | 4924 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: { |
| 4926 const int kBlockWidth = 4; | 4925 const int kBlockWidth = 4; |
| 4927 const int kBlockHeight = 4; | 4926 const int kBlockHeight = 4; |
| 4928 if ((xoffset % kBlockWidth) || (yoffset % kBlockHeight)) { | 4927 if ((xoffset % kBlockWidth) || (yoffset % kBlockHeight)) { |
| 4929 synthesizeGLError(GL_INVALID_OPERATION, functionName, "xoffset or yo
ffset not multiple of 4"); | 4928 synthesizeGLError(GL_INVALID_OPERATION, functionName, "xoffset or yo
ffset not multiple of 4"); |
| 4930 return false; | 4929 return false; |
| 4931 } | 4930 } |
| 4932 if (width - xoffset > tex->getWidth(target, level) | 4931 if (width - xoffset > tex->getWidth(target, level) |
| 4933 || height - yoffset > tex->getHeight(target, level)) { | 4932 || height - yoffset > tex->getHeight(target, level)) { |
| 4934 synthesizeGLError(GL_INVALID_OPERATION, functionName, "dimensions ou
t of range"); | 4933 synthesizeGLError(GL_INVALID_OPERATION, functionName, "dimensions ou
t of range"); |
| 4935 return false; | 4934 return false; |
| (...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5571 { | 5570 { |
| 5572 return IntSize(clamp(canvas()->width(), 1, m_maxViewportDims[0]), | 5571 return IntSize(clamp(canvas()->width(), 1, m_maxViewportDims[0]), |
| 5573 clamp(canvas()->height(), 1, m_maxViewportDims[1])); | 5572 clamp(canvas()->height(), 1, m_maxViewportDims[1])); |
| 5574 } | 5573 } |
| 5575 | 5574 |
| 5576 GLint WebGLRenderingContext::maxDrawBuffers() | 5575 GLint WebGLRenderingContext::maxDrawBuffers() |
| 5577 { | 5576 { |
| 5578 if (isContextLost() || !m_webglDrawBuffers) | 5577 if (isContextLost() || !m_webglDrawBuffers) |
| 5579 return 0; | 5578 return 0; |
| 5580 if (!m_maxDrawBuffers) | 5579 if (!m_maxDrawBuffers) |
| 5581 m_context->getIntegerv(Extensions3D::MAX_DRAW_BUFFERS_EXT, &m_maxDrawBuf
fers); | 5580 m_context->getIntegerv(GL_MAX_DRAW_BUFFERS_EXT, &m_maxDrawBuffers); |
| 5582 if (!m_maxColorAttachments) | 5581 if (!m_maxColorAttachments) |
| 5583 m_context->getIntegerv(Extensions3D::MAX_COLOR_ATTACHMENTS_EXT, &m_maxCo
lorAttachments); | 5582 m_context->getIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &m_maxColorAttachme
nts); |
| 5584 // WEBGL_draw_buffers requires MAX_COLOR_ATTACHMENTS >= MAX_DRAW_BUFFERS. | 5583 // WEBGL_draw_buffers requires MAX_COLOR_ATTACHMENTS >= MAX_DRAW_BUFFERS. |
| 5585 return std::min(m_maxDrawBuffers, m_maxColorAttachments); | 5584 return std::min(m_maxDrawBuffers, m_maxColorAttachments); |
| 5586 } | 5585 } |
| 5587 | 5586 |
| 5588 GLint WebGLRenderingContext::maxColorAttachments() | 5587 GLint WebGLRenderingContext::maxColorAttachments() |
| 5589 { | 5588 { |
| 5590 if (isContextLost() || !m_webglDrawBuffers) | 5589 if (isContextLost() || !m_webglDrawBuffers) |
| 5591 return 0; | 5590 return 0; |
| 5592 if (!m_maxColorAttachments) | 5591 if (!m_maxColorAttachments) |
| 5593 m_context->getIntegerv(Extensions3D::MAX_COLOR_ATTACHMENTS_EXT, &m_maxCo
lorAttachments); | 5592 m_context->getIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &m_maxColorAttachme
nts); |
| 5594 return m_maxColorAttachments; | 5593 return m_maxColorAttachments; |
| 5595 } | 5594 } |
| 5596 | 5595 |
| 5597 void WebGLRenderingContext::setBackDrawBuffer(GLenum buf) | 5596 void WebGLRenderingContext::setBackDrawBuffer(GLenum buf) |
| 5598 { | 5597 { |
| 5599 m_backDrawBuffer = buf; | 5598 m_backDrawBuffer = buf; |
| 5600 } | 5599 } |
| 5601 | 5600 |
| 5602 void WebGLRenderingContext::restoreCurrentFramebuffer() | 5601 void WebGLRenderingContext::restoreCurrentFramebuffer() |
| 5603 { | 5602 { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5638 if (m_textureUnits[i].m_texture2DBinding | 5637 if (m_textureUnits[i].m_texture2DBinding |
| 5639 || m_textureUnits[i].m_textureCubeMapBinding) { | 5638 || m_textureUnits[i].m_textureCubeMapBinding) { |
| 5640 m_onePlusMaxNonDefaultTextureUnit = i + 1; | 5639 m_onePlusMaxNonDefaultTextureUnit = i + 1; |
| 5641 return; | 5640 return; |
| 5642 } | 5641 } |
| 5643 } | 5642 } |
| 5644 m_onePlusMaxNonDefaultTextureUnit = 0; | 5643 m_onePlusMaxNonDefaultTextureUnit = 0; |
| 5645 } | 5644 } |
| 5646 | 5645 |
| 5647 } // namespace WebCore | 5646 } // namespace WebCore |
| OLD | NEW |