Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: Source/core/html/canvas/WebGLRenderingContext.cpp

Issue 106503003: Changed GL enums from GraphicsContext3D to standard versions (Take 2) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/canvas/WebGLRenderbuffer.cpp ('k') | Source/core/html/canvas/WebGLTexture.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 , m_onePlusMaxEnabledAttribIndex(0) 555 , m_onePlusMaxEnabledAttribIndex(0)
556 , m_onePlusMaxNonDefaultTextureUnit(0) 556 , m_onePlusMaxNonDefaultTextureUnit(0)
557 { 557 {
558 ASSERT(m_context); 558 ASSERT(m_context);
559 ScriptWrappable::init(this); 559 ScriptWrappable::init(this);
560 560
561 m_contextGroup = WebGLContextGroup::create(); 561 m_contextGroup = WebGLContextGroup::create();
562 m_contextGroup->addContext(this); 562 m_contextGroup->addContext(this);
563 563
564 m_maxViewportDims[0] = m_maxViewportDims[1] = 0; 564 m_maxViewportDims[0] = m_maxViewportDims[1] = 0;
565 m_context->getIntegerv(GraphicsContext3D::MAX_VIEWPORT_DIMS, m_maxViewportDi ms); 565 m_context->getIntegerv(GL_MAX_VIEWPORT_DIMS, m_maxViewportDims);
566 566
567 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR ef(new WebGLRenderingContextEvictionManager()); 567 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR ef(new WebGLRenderingContextEvictionManager());
568 568
569 // Create the DrawingBuffer and initialize the platform layer. 569 // Create the DrawingBuffer and initialize the platform layer.
570 DrawingBuffer::PreserveDrawingBuffer preserve = m_attributes.preserveDrawing Buffer ? DrawingBuffer::Preserve : DrawingBuffer::Discard; 570 DrawingBuffer::PreserveDrawingBuffer preserve = m_attributes.preserveDrawing Buffer ? DrawingBuffer::Preserve : DrawingBuffer::Discard;
571 m_drawingBuffer = DrawingBuffer::create(m_context.get(), clampedCanvasSize() , preserve, contextEvictionManager.release()); 571 m_drawingBuffer = DrawingBuffer::create(m_context.get(), clampedCanvasSize() , preserve, contextEvictionManager.release());
572 572
573 if (!m_drawingBuffer->isZeroSized()) { 573 if (!m_drawingBuffer->isZeroSized()) {
574 m_drawingBuffer->bind(); 574 m_drawingBuffer->bind();
575 setupFlags(); 575 setupFlags();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 void WebGLRenderingContext::initializeNewContext() 607 void WebGLRenderingContext::initializeNewContext()
608 { 608 {
609 ASSERT(!isContextLost()); 609 ASSERT(!isContextLost());
610 m_needsUpdate = true; 610 m_needsUpdate = true;
611 m_markedCanvasDirty = false; 611 m_markedCanvasDirty = false;
612 m_activeTextureUnit = 0; 612 m_activeTextureUnit = 0;
613 m_packAlignment = 4; 613 m_packAlignment = 4;
614 m_unpackAlignment = 4; 614 m_unpackAlignment = 4;
615 m_unpackFlipY = false; 615 m_unpackFlipY = false;
616 m_unpackPremultiplyAlpha = false; 616 m_unpackPremultiplyAlpha = false;
617 m_unpackColorspaceConversion = GraphicsContext3D::BROWSER_DEFAULT_WEBGL; 617 m_unpackColorspaceConversion = GC3D_BROWSER_DEFAULT_WEBGL;
618 m_boundArrayBuffer = 0; 618 m_boundArrayBuffer = 0;
619 m_currentProgram = 0; 619 m_currentProgram = 0;
620 m_framebufferBinding = 0; 620 m_framebufferBinding = 0;
621 m_renderbufferBinding = 0; 621 m_renderbufferBinding = 0;
622 m_depthMask = true; 622 m_depthMask = true;
623 m_stencilEnabled = false; 623 m_stencilEnabled = false;
624 m_stencilMask = 0xFFFFFFFF; 624 m_stencilMask = 0xFFFFFFFF;
625 m_stencilMaskBack = 0xFFFFFFFF; 625 m_stencilMaskBack = 0xFFFFFFFF;
626 m_stencilFuncRef = 0; 626 m_stencilFuncRef = 0;
627 m_stencilFuncRefBack = 0; 627 m_stencilFuncRefBack = 0;
628 m_stencilFuncMask = 0xFFFFFFFF; 628 m_stencilFuncMask = 0xFFFFFFFF;
629 m_stencilFuncMaskBack = 0xFFFFFFFF; 629 m_stencilFuncMaskBack = 0xFFFFFFFF;
630 m_layerCleared = false; 630 m_layerCleared = false;
631 m_numGLErrorsToConsoleAllowed = maxGLErrorsAllowedToConsole; 631 m_numGLErrorsToConsoleAllowed = maxGLErrorsAllowedToConsole;
632 632
633 m_clearColor[0] = m_clearColor[1] = m_clearColor[2] = m_clearColor[3] = 0; 633 m_clearColor[0] = m_clearColor[1] = m_clearColor[2] = m_clearColor[3] = 0;
634 m_scissorEnabled = false; 634 m_scissorEnabled = false;
635 m_clearDepth = 1; 635 m_clearDepth = 1;
636 m_clearStencil = 0; 636 m_clearStencil = 0;
637 m_colorMask[0] = m_colorMask[1] = m_colorMask[2] = m_colorMask[3] = true; 637 m_colorMask[0] = m_colorMask[1] = m_colorMask[2] = m_colorMask[3] = true;
638 638
639 GC3Dint numCombinedTextureImageUnits = 0; 639 GC3Dint numCombinedTextureImageUnits = 0;
640 m_context->getIntegerv(GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedTextureImageUnits); 640 m_context->getIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedText ureImageUnits);
641 m_textureUnits.clear(); 641 m_textureUnits.clear();
642 m_textureUnits.resize(numCombinedTextureImageUnits); 642 m_textureUnits.resize(numCombinedTextureImageUnits);
643 643
644 GC3Dint numVertexAttribs = 0; 644 GC3Dint numVertexAttribs = 0;
645 m_context->getIntegerv(GraphicsContext3D::MAX_VERTEX_ATTRIBS, &numVertexAttr ibs); 645 m_context->getIntegerv(GL_MAX_VERTEX_ATTRIBS, &numVertexAttribs);
646 m_maxVertexAttribs = numVertexAttribs; 646 m_maxVertexAttribs = numVertexAttribs;
647 647
648 m_maxTextureSize = 0; 648 m_maxTextureSize = 0;
649 m_context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &m_maxTextureSiz e); 649 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize);
650 m_maxTextureLevel = WebGLTexture::computeLevelCount(m_maxTextureSize, m_maxT extureSize); 650 m_maxTextureLevel = WebGLTexture::computeLevelCount(m_maxTextureSize, m_maxT extureSize);
651 m_maxCubeMapTextureSize = 0; 651 m_maxCubeMapTextureSize = 0;
652 m_context->getIntegerv(GraphicsContext3D::MAX_CUBE_MAP_TEXTURE_SIZE, &m_maxC ubeMapTextureSize); 652 m_context->getIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &m_maxCubeMapTextureSiz e);
653 m_maxCubeMapTextureLevel = WebGLTexture::computeLevelCount(m_maxCubeMapTextu reSize, m_maxCubeMapTextureSize); 653 m_maxCubeMapTextureLevel = WebGLTexture::computeLevelCount(m_maxCubeMapTextu reSize, m_maxCubeMapTextureSize);
654 m_maxRenderbufferSize = 0; 654 m_maxRenderbufferSize = 0;
655 m_context->getIntegerv(GraphicsContext3D::MAX_RENDERBUFFER_SIZE, &m_maxRende rbufferSize); 655 m_context->getIntegerv(GL_MAX_RENDERBUFFER_SIZE, &m_maxRenderbufferSize);
656 656
657 // These two values from EXT_draw_buffers are lazily queried. 657 // These two values from EXT_draw_buffers are lazily queried.
658 m_maxDrawBuffers = 0; 658 m_maxDrawBuffers = 0;
659 m_maxColorAttachments = 0; 659 m_maxColorAttachments = 0;
660 660
661 m_backDrawBuffer = GraphicsContext3D::BACK; 661 m_backDrawBuffer = GL_BACK;
662 662
663 m_defaultVertexArrayObject = WebGLVertexArrayObjectOES::create(this, WebGLVe rtexArrayObjectOES::VaoTypeDefault); 663 m_defaultVertexArrayObject = WebGLVertexArrayObjectOES::create(this, WebGLVe rtexArrayObjectOES::VaoTypeDefault);
664 addContextObject(m_defaultVertexArrayObject.get()); 664 addContextObject(m_defaultVertexArrayObject.get());
665 m_boundVertexArrayObject = m_defaultVertexArrayObject; 665 m_boundVertexArrayObject = m_defaultVertexArrayObject;
666 666
667 m_vertexAttribValue.resize(m_maxVertexAttribs); 667 m_vertexAttribValue.resize(m_maxVertexAttribs);
668 668
669 createFallbackBlackTextures1x1(); 669 createFallbackBlackTextures1x1();
670 670
671 IntSize canvasSize = clampedCanvasSize(); 671 IntSize canvasSize = clampedCanvasSize();
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 811
812 if (!m_context->layerComposited() || m_layerCleared 812 if (!m_context->layerComposited() || m_layerCleared
813 || m_attributes.preserveDrawingBuffer || (mask && m_framebufferBinding)) 813 || m_attributes.preserveDrawingBuffer || (mask && m_framebufferBinding))
814 return false; 814 return false;
815 815
816 RefPtr<WebGLContextAttributes> contextAttributes = getContextAttributes(); 816 RefPtr<WebGLContextAttributes> contextAttributes = getContextAttributes();
817 817
818 // Determine if it's possible to combine the clear the user asked for and th is clear. 818 // Determine if it's possible to combine the clear the user asked for and th is clear.
819 bool combinedClear = mask && !m_scissorEnabled; 819 bool combinedClear = mask && !m_scissorEnabled;
820 820
821 m_context->disable(GraphicsContext3D::SCISSOR_TEST); 821 m_context->disable(GL_SCISSOR_TEST);
822 if (combinedClear && (mask & GraphicsContext3D::COLOR_BUFFER_BIT)) 822 if (combinedClear && (mask & GL_COLOR_BUFFER_BIT))
823 m_context->clearColor(m_colorMask[0] ? m_clearColor[0] : 0, 823 m_context->clearColor(m_colorMask[0] ? m_clearColor[0] : 0,
824 m_colorMask[1] ? m_clearColor[1] : 0, 824 m_colorMask[1] ? m_clearColor[1] : 0,
825 m_colorMask[2] ? m_clearColor[2] : 0, 825 m_colorMask[2] ? m_clearColor[2] : 0,
826 m_colorMask[3] ? m_clearColor[3] : 0); 826 m_colorMask[3] ? m_clearColor[3] : 0);
827 else 827 else
828 m_context->clearColor(0, 0, 0, 0); 828 m_context->clearColor(0, 0, 0, 0);
829 m_context->colorMask(true, true, true, true); 829 m_context->colorMask(true, true, true, true);
830 GC3Dbitfield clearMask = GraphicsContext3D::COLOR_BUFFER_BIT; 830 GC3Dbitfield clearMask = GL_COLOR_BUFFER_BIT;
831 if (contextAttributes->depth()) { 831 if (contextAttributes->depth()) {
832 if (!combinedClear || !m_depthMask || !(mask & GraphicsContext3D::DEPTH_ BUFFER_BIT)) 832 if (!combinedClear || !m_depthMask || !(mask & GL_DEPTH_BUFFER_BIT))
833 m_context->clearDepth(1.0f); 833 m_context->clearDepth(1.0f);
834 clearMask |= GraphicsContext3D::DEPTH_BUFFER_BIT; 834 clearMask |= GL_DEPTH_BUFFER_BIT;
835 m_context->depthMask(true); 835 m_context->depthMask(true);
836 } 836 }
837 if (contextAttributes->stencil()) { 837 if (contextAttributes->stencil()) {
838 if (combinedClear && (mask & GraphicsContext3D::STENCIL_BUFFER_BIT)) 838 if (combinedClear && (mask & GL_STENCIL_BUFFER_BIT))
839 m_context->clearStencil(m_clearStencil & m_stencilMask); 839 m_context->clearStencil(m_clearStencil & m_stencilMask);
840 else 840 else
841 m_context->clearStencil(0); 841 m_context->clearStencil(0);
842 clearMask |= GraphicsContext3D::STENCIL_BUFFER_BIT; 842 clearMask |= GL_STENCIL_BUFFER_BIT;
843 m_context->stencilMaskSeparate(GraphicsContext3D::FRONT, 0xFFFFFFFF); 843 m_context->stencilMaskSeparate(GL_FRONT, 0xFFFFFFFF);
844 } 844 }
845 845
846 m_drawingBuffer->clearFramebuffers(clearMask); 846 m_drawingBuffer->clearFramebuffers(clearMask);
847 847
848 restoreStateAfterClear(); 848 restoreStateAfterClear();
849 if (m_framebufferBinding) 849 if (m_framebufferBinding)
850 m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, objectOrZero( m_framebufferBinding.get())); 850 m_context->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebufferBin ding.get()));
851 m_layerCleared = true; 851 m_layerCleared = true;
852 852
853 return combinedClear; 853 return combinedClear;
854 } 854 }
855 855
856 void WebGLRenderingContext::restoreStateAfterClear() 856 void WebGLRenderingContext::restoreStateAfterClear()
857 { 857 {
858 if (isContextLost()) 858 if (isContextLost())
859 return; 859 return;
860 860
861 // Restore the state that the context set. 861 // Restore the state that the context set.
862 if (m_scissorEnabled) 862 if (m_scissorEnabled)
863 m_context->enable(GraphicsContext3D::SCISSOR_TEST); 863 m_context->enable(GL_SCISSOR_TEST);
864 m_context->clearColor(m_clearColor[0], m_clearColor[1], 864 m_context->clearColor(m_clearColor[0], m_clearColor[1],
865 m_clearColor[2], m_clearColor[3]); 865 m_clearColor[2], m_clearColor[3]);
866 m_context->colorMask(m_colorMask[0], m_colorMask[1], 866 m_context->colorMask(m_colorMask[0], m_colorMask[1],
867 m_colorMask[2], m_colorMask[3]); 867 m_colorMask[2], m_colorMask[3]);
868 m_context->clearDepth(m_clearDepth); 868 m_context->clearDepth(m_clearDepth);
869 m_context->clearStencil(m_clearStencil); 869 m_context->clearStencil(m_clearStencil);
870 m_context->stencilMaskSeparate(GraphicsContext3D::FRONT, m_stencilMask); 870 m_context->stencilMaskSeparate(GL_FRONT, m_stencilMask);
871 m_context->depthMask(m_depthMask); 871 m_context->depthMask(m_depthMask);
872 } 872 }
873 873
874 void WebGLRenderingContext::markLayerComposited() 874 void WebGLRenderingContext::markLayerComposited()
875 { 875 {
876 if (!isContextLost()) 876 if (!isContextLost())
877 m_context->markLayerComposited(); 877 m_context->markLayerComposited();
878 } 878 }
879 879
880 void WebGLRenderingContext::paintRenderingResultsToCanvas() 880 void WebGLRenderingContext::paintRenderingResultsToCanvas()
(...skipping 20 matching lines...) Expand all
901 return; 901 return;
902 902
903 canvas()->clearCopiedImage(); 903 canvas()->clearCopiedImage();
904 m_markedCanvasDirty = false; 904 m_markedCanvasDirty = false;
905 905
906 m_drawingBuffer->commit(); 906 m_drawingBuffer->commit();
907 if (!(canvas()->buffer())->copyRenderingResultsFromDrawingBuffer(m_drawingBu ffer.get())) 907 if (!(canvas()->buffer())->copyRenderingResultsFromDrawingBuffer(m_drawingBu ffer.get()))
908 m_context->paintRenderingResultsToCanvas(canvas()->buffer(), m_drawingBu ffer.get()); 908 m_context->paintRenderingResultsToCanvas(canvas()->buffer(), m_drawingBu ffer.get());
909 909
910 if (m_framebufferBinding) 910 if (m_framebufferBinding)
911 m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, objectOrZero( m_framebufferBinding.get())); 911 m_context->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebufferBin ding.get()));
912 else 912 else
913 m_drawingBuffer->bind(); 913 m_drawingBuffer->bind();
914 } 914 }
915 915
916 PassRefPtr<ImageData> WebGLRenderingContext::paintRenderingResultsToImageData() 916 PassRefPtr<ImageData> WebGLRenderingContext::paintRenderingResultsToImageData()
917 { 917 {
918 if (isContextLost()) 918 if (isContextLost())
919 return 0; 919 return 0;
920 920
921 clearIfComposited(); 921 clearIfComposited();
922 m_drawingBuffer->commit(); 922 m_drawingBuffer->commit();
923 int width, height; 923 int width, height;
924 RefPtr<Uint8ClampedArray> imageDataPixels = m_context->paintRenderingResults ToImageData(m_drawingBuffer.get(), width, height); 924 RefPtr<Uint8ClampedArray> imageDataPixels = m_context->paintRenderingResults ToImageData(m_drawingBuffer.get(), width, height);
925 if (!imageDataPixels) 925 if (!imageDataPixels)
926 return 0; 926 return 0;
927 927
928 if (m_framebufferBinding) 928 if (m_framebufferBinding)
929 m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, objectOrZero( m_framebufferBinding.get())); 929 m_context->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebufferBin ding.get()));
930 else 930 else
931 m_drawingBuffer->bind(); 931 m_drawingBuffer->bind();
932 932
933 return ImageData::create(IntSize(width, height), imageDataPixels); 933 return ImageData::create(IntSize(width, height), imageDataPixels);
934 } 934 }
935 935
936 void WebGLRenderingContext::reshape(int width, int height) 936 void WebGLRenderingContext::reshape(int width, int height)
937 { 937 {
938 if (isContextLost()) 938 if (isContextLost())
939 return; 939 return;
(...skipping 14 matching lines...) Expand all
954 if (renderBox && renderBox->hasAcceleratedCompositing()) 954 if (renderBox && renderBox->hasAcceleratedCompositing())
955 renderBox->contentChanged(CanvasChanged); 955 renderBox->contentChanged(CanvasChanged);
956 m_needsUpdate = false; 956 m_needsUpdate = false;
957 } 957 }
958 958
959 // We don't have to mark the canvas as dirty, since the newly created image buffer will also start off 959 // We don't have to mark the canvas as dirty, since the newly created image buffer will also start off
960 // clear (and this matches what reshape will do). 960 // clear (and this matches what reshape will do).
961 m_drawingBuffer->reset(IntSize(width, height)); 961 m_drawingBuffer->reset(IntSize(width, height));
962 restoreStateAfterClear(); 962 restoreStateAfterClear();
963 963
964 m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, objectOrZero(m_texture Units[m_activeTextureUnit].m_texture2DBinding.get())); 964 m_context->bindTexture(GL_TEXTURE_2D, objectOrZero(m_textureUnits[m_activeTe xtureUnit].m_texture2DBinding.get()));
965 m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, objectOrZero(m_ renderbufferBinding.get())); 965 m_context->bindRenderbuffer(GL_RENDERBUFFER, objectOrZero(m_renderbufferBind ing.get()));
966 if (m_framebufferBinding) 966 if (m_framebufferBinding)
967 m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, objectOrZero(m_ framebufferBinding.get())); 967 m_context->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebufferBin ding.get()));
968 } 968 }
969 969
970 int WebGLRenderingContext::drawingBufferWidth() const 970 int WebGLRenderingContext::drawingBufferWidth() const
971 { 971 {
972 return m_drawingBuffer->size().width(); 972 return m_drawingBuffer->size().width();
973 } 973 }
974 974
975 int WebGLRenderingContext::drawingBufferHeight() const 975 int WebGLRenderingContext::drawingBufferHeight() const
976 { 976 {
977 return m_drawingBuffer->size().height(); 977 return m_drawingBuffer->size().height();
978 } 978 }
979 979
980 unsigned int WebGLRenderingContext::sizeInBytes(GC3Denum type) 980 unsigned int WebGLRenderingContext::sizeInBytes(GC3Denum type)
981 { 981 {
982 switch (type) { 982 switch (type) {
983 case GraphicsContext3D::BYTE: 983 case GL_BYTE:
984 return sizeof(GC3Dbyte); 984 return sizeof(GC3Dbyte);
985 case GraphicsContext3D::UNSIGNED_BYTE: 985 case GL_UNSIGNED_BYTE:
986 return sizeof(GC3Dubyte); 986 return sizeof(GC3Dubyte);
987 case GraphicsContext3D::SHORT: 987 case GL_SHORT:
988 return sizeof(GC3Dshort); 988 return sizeof(GC3Dshort);
989 case GraphicsContext3D::UNSIGNED_SHORT: 989 case GL_UNSIGNED_SHORT:
990 return sizeof(GC3Dushort); 990 return sizeof(GC3Dushort);
991 case GraphicsContext3D::INT: 991 case GL_INT:
992 return sizeof(GC3Dint); 992 return sizeof(GC3Dint);
993 case GraphicsContext3D::UNSIGNED_INT: 993 case GL_UNSIGNED_INT:
994 return sizeof(GC3Duint); 994 return sizeof(GC3Duint);
995 case GraphicsContext3D::FLOAT: 995 case GL_FLOAT:
996 return sizeof(GC3Dfloat); 996 return sizeof(GC3Dfloat);
997 } 997 }
998 ASSERT_NOT_REACHED(); 998 ASSERT_NOT_REACHED();
999 return 0; 999 return 0;
1000 } 1000 }
1001 1001
1002 void WebGLRenderingContext::activeTexture(GC3Denum texture) 1002 void WebGLRenderingContext::activeTexture(GC3Denum texture)
1003 { 1003 {
1004 if (isContextLost()) 1004 if (isContextLost())
1005 return; 1005 return;
1006 if (texture - GraphicsContext3D::TEXTURE0 >= m_textureUnits.size()) { 1006 if (texture - GL_TEXTURE0 >= m_textureUnits.size()) {
1007 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "activeTexture", "tex ture unit out of range"); 1007 synthesizeGLError(GL_INVALID_ENUM, "activeTexture", "texture unit out of range");
1008 return; 1008 return;
1009 } 1009 }
1010 m_activeTextureUnit = texture - GraphicsContext3D::TEXTURE0; 1010 m_activeTextureUnit = texture - GL_TEXTURE0;
1011 m_context->activeTexture(texture); 1011 m_context->activeTexture(texture);
1012 1012
1013 m_drawingBuffer->setActiveTextureUnit(texture); 1013 m_drawingBuffer->setActiveTextureUnit(texture);
1014 1014
1015 } 1015 }
1016 1016
1017 void WebGLRenderingContext::attachShader(WebGLProgram* program, WebGLShader* sha der) 1017 void WebGLRenderingContext::attachShader(WebGLProgram* program, WebGLShader* sha der)
1018 { 1018 {
1019 if (isContextLost() || !validateWebGLObject("attachShader", program) || !val idateWebGLObject("attachShader", shader)) 1019 if (isContextLost() || !validateWebGLObject("attachShader", program) || !val idateWebGLObject("attachShader", shader))
1020 return; 1020 return;
1021 if (!program->attachShader(shader)) { 1021 if (!program->attachShader(shader)) {
1022 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "attachShader", "shader attachment already has shader"); 1022 synthesizeGLError(GL_INVALID_OPERATION, "attachShader", "shader attachme nt already has shader");
1023 return; 1023 return;
1024 } 1024 }
1025 m_context->attachShader(objectOrZero(program), objectOrZero(shader)); 1025 m_context->attachShader(objectOrZero(program), objectOrZero(shader));
1026 shader->onAttached(); 1026 shader->onAttached();
1027 } 1027 }
1028 1028
1029 void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, GC3Duint i ndex, const String& name) 1029 void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, GC3Duint i ndex, const String& name)
1030 { 1030 {
1031 if (isContextLost() || !validateWebGLObject("bindAttribLocation", program)) 1031 if (isContextLost() || !validateWebGLObject("bindAttribLocation", program))
1032 return; 1032 return;
1033 if (!validateLocationLength("bindAttribLocation", name)) 1033 if (!validateLocationLength("bindAttribLocation", name))
1034 return; 1034 return;
1035 if (!validateString("bindAttribLocation", name)) 1035 if (!validateString("bindAttribLocation", name))
1036 return; 1036 return;
1037 if (isPrefixReserved(name)) { 1037 if (isPrefixReserved(name)) {
1038 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "bindAttribLocat ion", "reserved prefix"); 1038 synthesizeGLError(GL_INVALID_OPERATION, "bindAttribLocation", "reserved prefix");
1039 return; 1039 return;
1040 } 1040 }
1041 if (index >= m_maxVertexAttribs) { 1041 if (index >= m_maxVertexAttribs) {
1042 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bindAttribLocation" , "index out of range"); 1042 synthesizeGLError(GL_INVALID_VALUE, "bindAttribLocation", "index out of range");
1043 return; 1043 return;
1044 } 1044 }
1045 m_context->bindAttribLocation(objectOrZero(program), index, name); 1045 m_context->bindAttribLocation(objectOrZero(program), index, name);
1046 } 1046 }
1047 1047
1048 bool WebGLRenderingContext::checkObjectToBeBound(const char* functionName, WebGL Object* object, bool& deleted) 1048 bool WebGLRenderingContext::checkObjectToBeBound(const char* functionName, WebGL Object* object, bool& deleted)
1049 { 1049 {
1050 deleted = false; 1050 deleted = false;
1051 if (isContextLost()) 1051 if (isContextLost())
1052 return false; 1052 return false;
1053 if (object) { 1053 if (object) {
1054 if (!object->validate(contextGroup(), this)) { 1054 if (!object->validate(contextGroup(), this)) {
1055 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "object not from this context"); 1055 synthesizeGLError(GL_INVALID_OPERATION, functionName, "object not fr om this context");
1056 return false; 1056 return false;
1057 } 1057 }
1058 deleted = !object->object(); 1058 deleted = !object->object();
1059 } 1059 }
1060 return true; 1060 return true;
1061 } 1061 }
1062 1062
1063 void WebGLRenderingContext::bindBuffer(GC3Denum target, WebGLBuffer* buffer) 1063 void WebGLRenderingContext::bindBuffer(GC3Denum target, WebGLBuffer* buffer)
1064 { 1064 {
1065 bool deleted; 1065 bool deleted;
1066 if (!checkObjectToBeBound("bindBuffer", buffer, deleted)) 1066 if (!checkObjectToBeBound("bindBuffer", buffer, deleted))
1067 return; 1067 return;
1068 if (deleted) 1068 if (deleted)
1069 buffer = 0; 1069 buffer = 0;
1070 if (buffer && buffer->getTarget() && buffer->getTarget() != target) { 1070 if (buffer && buffer->getTarget() && buffer->getTarget() != target) {
1071 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "bindBuffer", "b uffers can not be used with multiple targets"); 1071 synthesizeGLError(GL_INVALID_OPERATION, "bindBuffer", "buffers can not b e used with multiple targets");
1072 return; 1072 return;
1073 } 1073 }
1074 if (target == GraphicsContext3D::ARRAY_BUFFER) 1074 if (target == GL_ARRAY_BUFFER)
1075 m_boundArrayBuffer = buffer; 1075 m_boundArrayBuffer = buffer;
1076 else if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) 1076 else if (target == GL_ELEMENT_ARRAY_BUFFER)
1077 m_boundVertexArrayObject->setElementArrayBuffer(buffer); 1077 m_boundVertexArrayObject->setElementArrayBuffer(buffer);
1078 else { 1078 else {
1079 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindBuffer", "invali d target"); 1079 synthesizeGLError(GL_INVALID_ENUM, "bindBuffer", "invalid target");
1080 return; 1080 return;
1081 } 1081 }
1082 1082
1083 m_context->bindBuffer(target, objectOrZero(buffer)); 1083 m_context->bindBuffer(target, objectOrZero(buffer));
1084 if (buffer) 1084 if (buffer)
1085 buffer->setTarget(target); 1085 buffer->setTarget(target);
1086 } 1086 }
1087 1087
1088 void WebGLRenderingContext::bindFramebuffer(GC3Denum target, WebGLFramebuffer* b uffer) 1088 void WebGLRenderingContext::bindFramebuffer(GC3Denum target, WebGLFramebuffer* b uffer)
1089 { 1089 {
1090 bool deleted; 1090 bool deleted;
1091 if (!checkObjectToBeBound("bindFramebuffer", buffer, deleted)) 1091 if (!checkObjectToBeBound("bindFramebuffer", buffer, deleted))
1092 return; 1092 return;
1093 if (deleted) 1093 if (deleted)
1094 buffer = 0; 1094 buffer = 0;
1095 if (target != GraphicsContext3D::FRAMEBUFFER) { 1095 if (target != GL_FRAMEBUFFER) {
1096 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindFramebuffer", "i nvalid target"); 1096 synthesizeGLError(GL_INVALID_ENUM, "bindFramebuffer", "invalid target");
1097 return; 1097 return;
1098 } 1098 }
1099 m_framebufferBinding = buffer; 1099 m_framebufferBinding = buffer;
1100 m_drawingBuffer->setFramebufferBinding(objectOrZero(m_framebufferBinding.get ())); 1100 m_drawingBuffer->setFramebufferBinding(objectOrZero(m_framebufferBinding.get ()));
1101 if (!m_framebufferBinding) { 1101 if (!m_framebufferBinding) {
1102 // Instead of binding fb 0, bind the drawing buffer. 1102 // Instead of binding fb 0, bind the drawing buffer.
1103 m_drawingBuffer->bind(); 1103 m_drawingBuffer->bind();
1104 } else 1104 } else
1105 m_context->bindFramebuffer(target, objectOrZero(buffer)); 1105 m_context->bindFramebuffer(target, objectOrZero(buffer));
1106 if (buffer) 1106 if (buffer)
1107 buffer->setHasEverBeenBound(); 1107 buffer->setHasEverBeenBound();
1108 applyStencilTest(); 1108 applyStencilTest();
1109 } 1109 }
1110 1110
1111 void WebGLRenderingContext::bindRenderbuffer(GC3Denum target, WebGLRenderbuffer* renderBuffer) 1111 void WebGLRenderingContext::bindRenderbuffer(GC3Denum target, WebGLRenderbuffer* renderBuffer)
1112 { 1112 {
1113 bool deleted; 1113 bool deleted;
1114 if (!checkObjectToBeBound("bindRenderbuffer", renderBuffer, deleted)) 1114 if (!checkObjectToBeBound("bindRenderbuffer", renderBuffer, deleted))
1115 return; 1115 return;
1116 if (deleted) 1116 if (deleted)
1117 renderBuffer = 0; 1117 renderBuffer = 0;
1118 if (target != GraphicsContext3D::RENDERBUFFER) { 1118 if (target != GL_RENDERBUFFER) {
1119 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindRenderbuffer", " invalid target"); 1119 synthesizeGLError(GL_INVALID_ENUM, "bindRenderbuffer", "invalid target") ;
1120 return; 1120 return;
1121 } 1121 }
1122 m_renderbufferBinding = renderBuffer; 1122 m_renderbufferBinding = renderBuffer;
1123 m_context->bindRenderbuffer(target, objectOrZero(renderBuffer)); 1123 m_context->bindRenderbuffer(target, objectOrZero(renderBuffer));
1124 if (renderBuffer) 1124 if (renderBuffer)
1125 renderBuffer->setHasEverBeenBound(); 1125 renderBuffer->setHasEverBeenBound();
1126 } 1126 }
1127 1127
1128 void WebGLRenderingContext::bindTexture(GC3Denum target, WebGLTexture* texture) 1128 void WebGLRenderingContext::bindTexture(GC3Denum target, WebGLTexture* texture)
1129 { 1129 {
1130 bool deleted; 1130 bool deleted;
1131 if (!checkObjectToBeBound("bindTexture", texture, deleted)) 1131 if (!checkObjectToBeBound("bindTexture", texture, deleted))
1132 return; 1132 return;
1133 if (deleted) 1133 if (deleted)
1134 texture = 0; 1134 texture = 0;
1135 if (texture && texture->getTarget() && texture->getTarget() != target) { 1135 if (texture && texture->getTarget() && texture->getTarget() != target) {
1136 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "bindTexture", " textures can not be used with multiple targets"); 1136 synthesizeGLError(GL_INVALID_OPERATION, "bindTexture", "textures can not be used with multiple targets");
1137 return; 1137 return;
1138 } 1138 }
1139 GC3Dint maxLevel = 0; 1139 GC3Dint maxLevel = 0;
1140 if (target == GraphicsContext3D::TEXTURE_2D) { 1140 if (target == GL_TEXTURE_2D) {
1141 m_textureUnits[m_activeTextureUnit].m_texture2DBinding = texture; 1141 m_textureUnits[m_activeTextureUnit].m_texture2DBinding = texture;
1142 maxLevel = m_maxTextureLevel; 1142 maxLevel = m_maxTextureLevel;
1143 1143
1144 if (!m_activeTextureUnit) 1144 if (!m_activeTextureUnit)
1145 m_drawingBuffer->setTexture2DBinding(objectOrZero(texture)); 1145 m_drawingBuffer->setTexture2DBinding(objectOrZero(texture));
1146 1146
1147 } else if (target == GraphicsContext3D::TEXTURE_CUBE_MAP) { 1147 } else if (target == GL_TEXTURE_CUBE_MAP) {
1148 m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding = texture; 1148 m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding = texture;
1149 maxLevel = m_maxCubeMapTextureLevel; 1149 maxLevel = m_maxCubeMapTextureLevel;
1150 } else { 1150 } else {
1151 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindTexture", "inval id target"); 1151 synthesizeGLError(GL_INVALID_ENUM, "bindTexture", "invalid target");
1152 return; 1152 return;
1153 } 1153 }
1154 1154
1155 m_context->bindTexture(target, objectOrZero(texture)); 1155 m_context->bindTexture(target, objectOrZero(texture));
1156 if (texture) { 1156 if (texture) {
1157 texture->setTarget(target, maxLevel); 1157 texture->setTarget(target, maxLevel);
1158 m_onePlusMaxNonDefaultTextureUnit = max(m_activeTextureUnit + 1, m_onePl usMaxNonDefaultTextureUnit); 1158 m_onePlusMaxNonDefaultTextureUnit = max(m_activeTextureUnit + 1, m_onePl usMaxNonDefaultTextureUnit);
1159 } else { 1159 } else {
1160 // If the disabled index is the current maximum, trace backwards to find the new max enabled texture index 1160 // If the disabled index is the current maximum, trace backwards to find the new max enabled texture index
1161 if (m_onePlusMaxNonDefaultTextureUnit == m_activeTextureUnit + 1) { 1161 if (m_onePlusMaxNonDefaultTextureUnit == m_activeTextureUnit + 1) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 } 1212 }
1213 1213
1214 void WebGLRenderingContext::bufferData(GC3Denum target, long long size, GC3Denum usage) 1214 void WebGLRenderingContext::bufferData(GC3Denum target, long long size, GC3Denum usage)
1215 { 1215 {
1216 if (isContextLost()) 1216 if (isContextLost())
1217 return; 1217 return;
1218 WebGLBuffer* buffer = validateBufferDataParameters("bufferData", target, usa ge); 1218 WebGLBuffer* buffer = validateBufferDataParameters("bufferData", target, usa ge);
1219 if (!buffer) 1219 if (!buffer)
1220 return; 1220 return;
1221 if (size < 0) { 1221 if (size < 0) {
1222 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferData", "size < 0"); 1222 synthesizeGLError(GL_INVALID_VALUE, "bufferData", "size < 0");
1223 return; 1223 return;
1224 } 1224 }
1225 if (!size) { 1225 if (!size) {
1226 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferData", "size == 0"); 1226 synthesizeGLError(GL_INVALID_VALUE, "bufferData", "size == 0");
1227 return; 1227 return;
1228 } 1228 }
1229 1229
1230 m_context->bufferData(target, static_cast<GC3Dsizeiptr>(size), usage); 1230 m_context->bufferData(target, static_cast<GC3Dsizeiptr>(size), usage);
1231 } 1231 }
1232 1232
1233 void WebGLRenderingContext::bufferData(GC3Denum target, ArrayBuffer* data, GC3De num usage) 1233 void WebGLRenderingContext::bufferData(GC3Denum target, ArrayBuffer* data, GC3De num usage)
1234 { 1234 {
1235 if (isContextLost()) 1235 if (isContextLost())
1236 return; 1236 return;
1237 WebGLBuffer* buffer = validateBufferDataParameters("bufferData", target, usa ge); 1237 WebGLBuffer* buffer = validateBufferDataParameters("bufferData", target, usa ge);
1238 if (!buffer) 1238 if (!buffer)
1239 return; 1239 return;
1240 if (!data) { 1240 if (!data) {
1241 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferData", "no da ta"); 1241 synthesizeGLError(GL_INVALID_VALUE, "bufferData", "no data");
1242 return; 1242 return;
1243 } 1243 }
1244 m_context->bufferData(target, data->byteLength(), data->data(), usage); 1244 m_context->bufferData(target, data->byteLength(), data->data(), usage);
1245 } 1245 }
1246 1246
1247 void WebGLRenderingContext::bufferData(GC3Denum target, ArrayBufferView* data, G C3Denum usage) 1247 void WebGLRenderingContext::bufferData(GC3Denum target, ArrayBufferView* data, G C3Denum usage)
1248 { 1248 {
1249 if (isContextLost()) 1249 if (isContextLost())
1250 return; 1250 return;
1251 WebGLBuffer* buffer = validateBufferDataParameters("bufferData", target, usa ge); 1251 WebGLBuffer* buffer = validateBufferDataParameters("bufferData", target, usa ge);
1252 if (!buffer) 1252 if (!buffer)
1253 return; 1253 return;
1254 if (!data) { 1254 if (!data) {
1255 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferData", "no da ta"); 1255 synthesizeGLError(GL_INVALID_VALUE, "bufferData", "no data");
1256 return; 1256 return;
1257 } 1257 }
1258 1258
1259 m_context->bufferData(target, data->byteLength(), data->baseAddress(), usage ); 1259 m_context->bufferData(target, data->byteLength(), data->baseAddress(), usage );
1260 } 1260 }
1261 1261
1262 void WebGLRenderingContext::bufferSubData(GC3Denum target, long long offset, Arr ayBuffer* data) 1262 void WebGLRenderingContext::bufferSubData(GC3Denum target, long long offset, Arr ayBuffer* data)
1263 { 1263 {
1264 if (isContextLost()) 1264 if (isContextLost())
1265 return; 1265 return;
1266 WebGLBuffer* buffer = validateBufferDataParameters("bufferSubData", target, GraphicsContext3D::STATIC_DRAW); 1266 WebGLBuffer* buffer = validateBufferDataParameters("bufferSubData", target, GL_STATIC_DRAW);
1267 if (!buffer) 1267 if (!buffer)
1268 return; 1268 return;
1269 if (offset < 0) { 1269 if (offset < 0) {
1270 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferSubData", "of fset < 0"); 1270 synthesizeGLError(GL_INVALID_VALUE, "bufferSubData", "offset < 0");
1271 return; 1271 return;
1272 } 1272 }
1273 if (!data) 1273 if (!data)
1274 return; 1274 return;
1275 1275
1276 m_context->bufferSubData(target, static_cast<GC3Dintptr>(offset), data->byte Length(), data->data()); 1276 m_context->bufferSubData(target, static_cast<GC3Dintptr>(offset), data->byte Length(), data->data());
1277 } 1277 }
1278 1278
1279 void WebGLRenderingContext::bufferSubData(GC3Denum target, long long offset, Arr ayBufferView* data) 1279 void WebGLRenderingContext::bufferSubData(GC3Denum target, long long offset, Arr ayBufferView* data)
1280 { 1280 {
1281 if (isContextLost()) 1281 if (isContextLost())
1282 return; 1282 return;
1283 WebGLBuffer* buffer = validateBufferDataParameters("bufferSubData", target, GraphicsContext3D::STATIC_DRAW); 1283 WebGLBuffer* buffer = validateBufferDataParameters("bufferSubData", target, GL_STATIC_DRAW);
1284 if (!buffer) 1284 if (!buffer)
1285 return; 1285 return;
1286 if (offset < 0) { 1286 if (offset < 0) {
1287 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferSubData", "of fset < 0"); 1287 synthesizeGLError(GL_INVALID_VALUE, "bufferSubData", "offset < 0");
1288 return; 1288 return;
1289 } 1289 }
1290 if (!data) 1290 if (!data)
1291 return; 1291 return;
1292 1292
1293 m_context->bufferSubData(target, static_cast<GC3Dintptr>(offset), data->byte Length(), data->baseAddress()); 1293 m_context->bufferSubData(target, static_cast<GC3Dintptr>(offset), data->byte Length(), data->baseAddress());
1294 } 1294 }
1295 1295
1296 GC3Denum WebGLRenderingContext::checkFramebufferStatus(GC3Denum target) 1296 GC3Denum WebGLRenderingContext::checkFramebufferStatus(GC3Denum target)
1297 { 1297 {
1298 if (isContextLost()) 1298 if (isContextLost())
1299 return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED; 1299 return GL_FRAMEBUFFER_UNSUPPORTED;
1300 if (target != GraphicsContext3D::FRAMEBUFFER) { 1300 if (target != GL_FRAMEBUFFER) {
1301 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "checkFramebufferStat us", "invalid target"); 1301 synthesizeGLError(GL_INVALID_ENUM, "checkFramebufferStatus", "invalid ta rget");
1302 return 0; 1302 return 0;
1303 } 1303 }
1304 if (!m_framebufferBinding || !m_framebufferBinding->object()) 1304 if (!m_framebufferBinding || !m_framebufferBinding->object())
1305 return GraphicsContext3D::FRAMEBUFFER_COMPLETE; 1305 return GL_FRAMEBUFFER_COMPLETE;
1306 const char* reason = "framebuffer incomplete"; 1306 const char* reason = "framebuffer incomplete";
1307 GC3Denum result = m_framebufferBinding->checkStatus(&reason); 1307 GC3Denum result = m_framebufferBinding->checkStatus(&reason);
1308 if (result != GraphicsContext3D::FRAMEBUFFER_COMPLETE) { 1308 if (result != GL_FRAMEBUFFER_COMPLETE) {
1309 emitGLWarning("checkFramebufferStatus", reason); 1309 emitGLWarning("checkFramebufferStatus", reason);
1310 return result; 1310 return result;
1311 } 1311 }
1312 result = m_context->checkFramebufferStatus(target); 1312 result = m_context->checkFramebufferStatus(target);
1313 return result; 1313 return result;
1314 } 1314 }
1315 1315
1316 void WebGLRenderingContext::clear(GC3Dbitfield mask) 1316 void WebGLRenderingContext::clear(GC3Dbitfield mask)
1317 { 1317 {
1318 if (isContextLost()) 1318 if (isContextLost())
1319 return; 1319 return;
1320 if (mask & ~(GraphicsContext3D::COLOR_BUFFER_BIT | GraphicsContext3D::DEPTH_ BUFFER_BIT | GraphicsContext3D::STENCIL_BUFFER_BIT)) { 1320 if (mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_B IT)) {
1321 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "clear", "invalid ma sk"); 1321 synthesizeGLError(GL_INVALID_VALUE, "clear", "invalid mask");
1322 return; 1322 return;
1323 } 1323 }
1324 const char* reason = "framebuffer incomplete"; 1324 const char* reason = "framebuffer incomplete";
1325 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) { 1325 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) {
1326 synthesizeGLError(GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION, "cle ar", reason); 1326 synthesizeGLError(GL_INVALID_FRAMEBUFFER_OPERATION, "clear", reason);
1327 return; 1327 return;
1328 } 1328 }
1329 if (!clearIfComposited(mask)) 1329 if (!clearIfComposited(mask))
1330 m_context->clear(mask); 1330 m_context->clear(mask);
1331 markContextChanged(); 1331 markContextChanged();
1332 } 1332 }
1333 1333
1334 void WebGLRenderingContext::clearColor(GC3Dfloat r, GC3Dfloat g, GC3Dfloat b, GC 3Dfloat a) 1334 void WebGLRenderingContext::clearColor(GC3Dfloat r, GC3Dfloat g, GC3Dfloat b, GC 3Dfloat a)
1335 { 1335 {
1336 if (isContextLost()) 1336 if (isContextLost())
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 1386
1387 void WebGLRenderingContext::compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, 1387 void WebGLRenderingContext::compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width,
1388 GC3Dsizei height, GC3Dint borde r, ArrayBufferView* data) 1388 GC3Dsizei height, GC3Dint borde r, ArrayBufferView* data)
1389 { 1389 {
1390 if (isContextLost()) 1390 if (isContextLost())
1391 return; 1391 return;
1392 if (!validateTexFuncLevel("compressedTexImage2D", target, level)) 1392 if (!validateTexFuncLevel("compressedTexImage2D", target, level))
1393 return; 1393 return;
1394 1394
1395 if (!validateCompressedTexFormat(internalformat)) { 1395 if (!validateCompressedTexFormat(internalformat)) {
1396 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "compressedTexImage2D ", "invalid internalformat"); 1396 synthesizeGLError(GL_INVALID_ENUM, "compressedTexImage2D", "invalid inte rnalformat");
1397 return; 1397 return;
1398 } 1398 }
1399 if (border) { 1399 if (border) {
1400 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "compressedTexImage2 D", "border not 0"); 1400 synthesizeGLError(GL_INVALID_VALUE, "compressedTexImage2D", "border not 0");
1401 return; 1401 return;
1402 } 1402 }
1403 if (!validateCompressedTexDimensions("compressedTexImage2D", NotTexSubImage2 D, target, level, width, height, internalformat)) 1403 if (!validateCompressedTexDimensions("compressedTexImage2D", NotTexSubImage2 D, target, level, width, height, internalformat))
1404 return; 1404 return;
1405 if (!validateCompressedTexFuncData("compressedTexImage2D", width, height, in ternalformat, data)) 1405 if (!validateCompressedTexFuncData("compressedTexImage2D", width, height, in ternalformat, data))
1406 return; 1406 return;
1407 1407
1408 WebGLTexture* tex = validateTextureBinding("compressedTexImage2D", target, t rue); 1408 WebGLTexture* tex = validateTextureBinding("compressedTexImage2D", target, t rue);
1409 if (!tex) 1409 if (!tex)
1410 return; 1410 return;
1411 if (!isGLES2NPOTStrict()) { 1411 if (!isGLES2NPOTStrict()) {
1412 if (level && WebGLTexture::isNPOT(width, height)) { 1412 if (level && WebGLTexture::isNPOT(width, height)) {
1413 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "compressedTexIm age2D", "level > 0 not power of 2"); 1413 synthesizeGLError(GL_INVALID_VALUE, "compressedTexImage2D", "level > 0 not power of 2");
1414 return; 1414 return;
1415 } 1415 }
1416 } 1416 }
1417 graphicsContext3D()->compressedTexImage2D(target, level, internalformat, wid th, height, 1417 graphicsContext3D()->compressedTexImage2D(target, level, internalformat, wid th, height,
1418 border, data->byteLength(), data-> baseAddress()); 1418 border, data->byteLength(), data-> baseAddress());
1419 tex->setLevelInfo(target, level, internalformat, width, height, GraphicsCont ext3D::UNSIGNED_BYTE); 1419 tex->setLevelInfo(target, level, internalformat, width, height, GL_UNSIGNED_ BYTE);
1420 } 1420 }
1421 1421
1422 void WebGLRenderingContext::compressedTexSubImage2D(GC3Denum target, GC3Dint lev el, GC3Dint xoffset, GC3Dint yoffset, 1422 void WebGLRenderingContext::compressedTexSubImage2D(GC3Denum target, GC3Dint lev el, GC3Dint xoffset, GC3Dint yoffset,
1423 GC3Dsizei width, GC3Dsizei h eight, GC3Denum format, ArrayBufferView* data) 1423 GC3Dsizei width, GC3Dsizei h eight, GC3Denum format, ArrayBufferView* data)
1424 { 1424 {
1425 if (isContextLost()) 1425 if (isContextLost())
1426 return; 1426 return;
1427 if (!validateTexFuncLevel("compressedTexSubImage2D", target, level)) 1427 if (!validateTexFuncLevel("compressedTexSubImage2D", target, level))
1428 return; 1428 return;
1429 if (!validateCompressedTexFormat(format)) { 1429 if (!validateCompressedTexFormat(format)) {
1430 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "compressedTexSubImag e2D", "invalid format"); 1430 synthesizeGLError(GL_INVALID_ENUM, "compressedTexSubImage2D", "invalid f ormat");
1431 return; 1431 return;
1432 } 1432 }
1433 if (!validateCompressedTexFuncData("compressedTexSubImage2D", width, height, format, data)) 1433 if (!validateCompressedTexFuncData("compressedTexSubImage2D", width, height, format, data))
1434 return; 1434 return;
1435 1435
1436 WebGLTexture* tex = validateTextureBinding("compressedTexSubImage2D", target , true); 1436 WebGLTexture* tex = validateTextureBinding("compressedTexSubImage2D", target , true);
1437 if (!tex) 1437 if (!tex)
1438 return; 1438 return;
1439 1439
1440 if (format != tex->getInternalFormat(target, level)) { 1440 if (format != tex->getInternalFormat(target, level)) {
1441 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "compressedTexSu bImage2D", "format does not match texture format"); 1441 synthesizeGLError(GL_INVALID_OPERATION, "compressedTexSubImage2D", "form at does not match texture format");
1442 return; 1442 return;
1443 } 1443 }
1444 1444
1445 if (!validateCompressedTexSubDimensions("compressedTexSubImage2D", target, l evel, xoffset, yoffset, width, height, format, tex)) 1445 if (!validateCompressedTexSubDimensions("compressedTexSubImage2D", target, l evel, xoffset, yoffset, width, height, format, tex))
1446 return; 1446 return;
1447 1447
1448 graphicsContext3D()->compressedTexSubImage2D(target, level, xoffset, yoffset , 1448 graphicsContext3D()->compressedTexSubImage2D(target, level, xoffset, yoffset ,
1449 width, height, format, data->by teLength(), data->baseAddress()); 1449 width, height, format, data->by teLength(), data->baseAddress());
1450 } 1450 }
1451 1451
1452 bool WebGLRenderingContext::validateSettableTexFormat(const char* functionName, GC3Denum format) 1452 bool WebGLRenderingContext::validateSettableTexFormat(const char* functionName, GC3Denum format)
1453 { 1453 {
1454 if (GraphicsContext3D::getClearBitsByFormat(format) & (GraphicsContext3D::DE PTH_BUFFER_BIT | GraphicsContext3D::STENCIL_BUFFER_BIT)) { 1454 if (GraphicsContext3D::getClearBitsByFormat(format) & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) {
1455 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "f ormat can not be set, only rendered to"); 1455 synthesizeGLError(GL_INVALID_OPERATION, functionName, "format can not be set, only rendered to");
1456 return false; 1456 return false;
1457 } 1457 }
1458 return true; 1458 return true;
1459 } 1459 }
1460 1460
1461 void WebGLRenderingContext::copyTexImage2D(GC3Denum target, GC3Dint level, GC3De num internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3 Dint border) 1461 void WebGLRenderingContext::copyTexImage2D(GC3Denum target, GC3Dint level, GC3De num internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3 Dint border)
1462 { 1462 {
1463 if (isContextLost()) 1463 if (isContextLost())
1464 return; 1464 return;
1465 if (!validateTexFuncParameters("copyTexImage2D", NotTexSubImage2D, target, l evel, internalformat, width, height, border, internalformat, GraphicsContext3D:: UNSIGNED_BYTE)) 1465 if (!validateTexFuncParameters("copyTexImage2D", NotTexSubImage2D, target, l evel, internalformat, width, height, border, internalformat, GL_UNSIGNED_BYTE))
1466 return; 1466 return;
1467 if (!validateSettableTexFormat("copyTexImage2D", internalformat)) 1467 if (!validateSettableTexFormat("copyTexImage2D", internalformat))
1468 return; 1468 return;
1469 WebGLTexture* tex = validateTextureBinding("copyTexImage2D", target, true); 1469 WebGLTexture* tex = validateTextureBinding("copyTexImage2D", target, true);
1470 if (!tex) 1470 if (!tex)
1471 return; 1471 return;
1472 if (!isTexInternalFormatColorBufferCombinationValid(internalformat, boundFra mebufferColorFormat())) { 1472 if (!isTexInternalFormatColorBufferCombinationValid(internalformat, boundFra mebufferColorFormat())) {
1473 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "copyTexImage2D" , "framebuffer is incompatible format"); 1473 synthesizeGLError(GL_INVALID_OPERATION, "copyTexImage2D", "framebuffer i s incompatible format");
1474 return; 1474 return;
1475 } 1475 }
1476 if (!isGLES2NPOTStrict() && level && WebGLTexture::isNPOT(width, height)) { 1476 if (!isGLES2NPOTStrict() && level && WebGLTexture::isNPOT(width, height)) {
1477 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "copyTexImage2D", "l evel > 0 not power of 2"); 1477 synthesizeGLError(GL_INVALID_VALUE, "copyTexImage2D", "level > 0 not pow er of 2");
1478 return; 1478 return;
1479 } 1479 }
1480 const char* reason = "framebuffer incomplete"; 1480 const char* reason = "framebuffer incomplete";
1481 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) { 1481 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) {
1482 synthesizeGLError(GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION, "cop yTexImage2D", reason); 1482 synthesizeGLError(GL_INVALID_FRAMEBUFFER_OPERATION, "copyTexImage2D", re ason);
1483 return; 1483 return;
1484 } 1484 }
1485 clearIfComposited(); 1485 clearIfComposited();
1486 ScopedDrawingBufferBinder binder(m_drawingBuffer.get(), m_framebufferBinding .get()); 1486 ScopedDrawingBufferBinder binder(m_drawingBuffer.get(), m_framebufferBinding .get());
1487 m_context->copyTexImage2D(target, level, internalformat, x, y, width, height , border); 1487 m_context->copyTexImage2D(target, level, internalformat, x, y, width, height , border);
1488 // FIXME: if the framebuffer is not complete, none of the below should be ex ecuted. 1488 // FIXME: if the framebuffer is not complete, none of the below should be ex ecuted.
1489 tex->setLevelInfo(target, level, internalformat, width, height, GraphicsCont ext3D::UNSIGNED_BYTE); 1489 tex->setLevelInfo(target, level, internalformat, width, height, GL_UNSIGNED_ BYTE);
1490 } 1490 }
1491 1491
1492 void WebGLRenderingContext::copyTexSubImage2D(GC3Denum target, GC3Dint level, GC 3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) 1492 void WebGLRenderingContext::copyTexSubImage2D(GC3Denum target, GC3Dint level, GC 3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height)
1493 { 1493 {
1494 if (isContextLost()) 1494 if (isContextLost())
1495 return; 1495 return;
1496 if (!validateTexFuncLevel("copyTexSubImage2D", target, level)) 1496 if (!validateTexFuncLevel("copyTexSubImage2D", target, level))
1497 return; 1497 return;
1498 WebGLTexture* tex = validateTextureBinding("copyTexSubImage2D", target, true ); 1498 WebGLTexture* tex = validateTextureBinding("copyTexSubImage2D", target, true );
1499 if (!tex) 1499 if (!tex)
1500 return; 1500 return;
1501 if (!validateSize("copyTexSubImage2D", xoffset, yoffset) || !validateSize("c opyTexSubImage2D", width, height)) 1501 if (!validateSize("copyTexSubImage2D", xoffset, yoffset) || !validateSize("c opyTexSubImage2D", width, height))
1502 return; 1502 return;
1503 // Before checking if it is in the range, check if overflow happens first. 1503 // Before checking if it is in the range, check if overflow happens first.
1504 if (xoffset + width < 0 || yoffset + height < 0) { 1504 if (xoffset + width < 0 || yoffset + height < 0) {
1505 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "copyTexSubImage2D", "bad dimensions"); 1505 synthesizeGLError(GL_INVALID_VALUE, "copyTexSubImage2D", "bad dimensions ");
1506 return; 1506 return;
1507 } 1507 }
1508 if (xoffset + width > tex->getWidth(target, level) || yoffset + height > tex ->getHeight(target, level)) { 1508 if (xoffset + width > tex->getWidth(target, level) || yoffset + height > tex ->getHeight(target, level)) {
1509 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "copyTexSubImage2D", "rectangle out of range"); 1509 synthesizeGLError(GL_INVALID_VALUE, "copyTexSubImage2D", "rectangle out of range");
1510 return; 1510 return;
1511 } 1511 }
1512 GC3Denum internalformat = tex->getInternalFormat(target, level); 1512 GC3Denum internalformat = tex->getInternalFormat(target, level);
1513 if (!validateSettableTexFormat("copyTexSubImage2D", internalformat)) 1513 if (!validateSettableTexFormat("copyTexSubImage2D", internalformat))
1514 return; 1514 return;
1515 if (!isTexInternalFormatColorBufferCombinationValid(internalformat, boundFra mebufferColorFormat())) { 1515 if (!isTexInternalFormatColorBufferCombinationValid(internalformat, boundFra mebufferColorFormat())) {
1516 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "copyTexSubImage 2D", "framebuffer is incompatible format"); 1516 synthesizeGLError(GL_INVALID_OPERATION, "copyTexSubImage2D", "framebuffe r is incompatible format");
1517 return; 1517 return;
1518 } 1518 }
1519 const char* reason = "framebuffer incomplete"; 1519 const char* reason = "framebuffer incomplete";
1520 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) { 1520 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) {
1521 synthesizeGLError(GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION, "cop yTexSubImage2D", reason); 1521 synthesizeGLError(GL_INVALID_FRAMEBUFFER_OPERATION, "copyTexSubImage2D", reason);
1522 return; 1522 return;
1523 } 1523 }
1524 clearIfComposited(); 1524 clearIfComposited();
1525 ScopedDrawingBufferBinder binder(m_drawingBuffer.get(), m_framebufferBinding .get()); 1525 ScopedDrawingBufferBinder binder(m_drawingBuffer.get(), m_framebufferBinding .get());
1526 m_context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, h eight); 1526 m_context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, h eight);
1527 } 1527 }
1528 1528
1529 PassRefPtr<WebGLBuffer> WebGLRenderingContext::createBuffer() 1529 PassRefPtr<WebGLBuffer> WebGLRenderingContext::createBuffer()
1530 { 1530 {
1531 if (isContextLost()) 1531 if (isContextLost())
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 m_context->bindRenderbuffer(target, objectOrZero(renderbuffer->emulatedS tencilBuffer())); 1580 m_context->bindRenderbuffer(target, objectOrZero(renderbuffer->emulatedS tencilBuffer()));
1581 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBinding.g et())); 1581 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBinding.g et()));
1582 } 1582 }
1583 return renderbuffer->emulatedStencilBuffer(); 1583 return renderbuffer->emulatedStencilBuffer();
1584 } 1584 }
1585 1585
1586 PassRefPtr<WebGLShader> WebGLRenderingContext::createShader(GC3Denum type) 1586 PassRefPtr<WebGLShader> WebGLRenderingContext::createShader(GC3Denum type)
1587 { 1587 {
1588 if (isContextLost()) 1588 if (isContextLost())
1589 return 0; 1589 return 0;
1590 if (type != GraphicsContext3D::VERTEX_SHADER && type != GraphicsContext3D::F RAGMENT_SHADER) { 1590 if (type != GL_VERTEX_SHADER && type != GL_FRAGMENT_SHADER) {
1591 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "createShader", "inva lid shader type"); 1591 synthesizeGLError(GL_INVALID_ENUM, "createShader", "invalid shader type" );
1592 return 0; 1592 return 0;
1593 } 1593 }
1594 1594
1595 RefPtr<WebGLShader> o = WebGLShader::create(this, type); 1595 RefPtr<WebGLShader> o = WebGLShader::create(this, type);
1596 addSharedObject(o.get()); 1596 addSharedObject(o.get());
1597 return o; 1597 return o;
1598 } 1598 }
1599 1599
1600 void WebGLRenderingContext::cullFace(GC3Denum mode) 1600 void WebGLRenderingContext::cullFace(GC3Denum mode)
1601 { 1601 {
1602 if (isContextLost()) 1602 if (isContextLost())
1603 return; 1603 return;
1604 switch (mode) { 1604 switch (mode) {
1605 case GraphicsContext3D::FRONT_AND_BACK: 1605 case GL_FRONT_AND_BACK:
1606 case GraphicsContext3D::FRONT: 1606 case GL_FRONT:
1607 case GraphicsContext3D::BACK: 1607 case GL_BACK:
1608 break; 1608 break;
1609 default: 1609 default:
1610 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "cullFace", "invalid mode"); 1610 synthesizeGLError(GL_INVALID_ENUM, "cullFace", "invalid mode");
1611 return; 1611 return;
1612 } 1612 }
1613 m_context->cullFace(mode); 1613 m_context->cullFace(mode);
1614 } 1614 }
1615 1615
1616 bool WebGLRenderingContext::deleteObject(WebGLObject* object) 1616 bool WebGLRenderingContext::deleteObject(WebGLObject* object)
1617 { 1617 {
1618 if (isContextLost() || !object) 1618 if (isContextLost() || !object)
1619 return false; 1619 return false;
1620 if (!object->validate(contextGroup(), this)) { 1620 if (!object->validate(contextGroup(), this)) {
1621 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "delete", "objec t does not belong to this context"); 1621 synthesizeGLError(GL_INVALID_OPERATION, "delete", "object does not belon g to this context");
1622 return false; 1622 return false;
1623 } 1623 }
1624 if (object->object()) 1624 if (object->object())
1625 // We need to pass in context here because we want 1625 // We need to pass in context here because we want
1626 // things in this context unbound. 1626 // things in this context unbound.
1627 object->deleteObject(graphicsContext3D()); 1627 object->deleteObject(graphicsContext3D());
1628 return true; 1628 return true;
1629 } 1629 }
1630 1630
1631 void WebGLRenderingContext::deleteBuffer(WebGLBuffer* buffer) 1631 void WebGLRenderingContext::deleteBuffer(WebGLBuffer* buffer)
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1714 return; 1714 return;
1715 m_depthMask = flag; 1715 m_depthMask = flag;
1716 m_context->depthMask(flag); 1716 m_context->depthMask(flag);
1717 } 1717 }
1718 1718
1719 void WebGLRenderingContext::depthRange(GC3Dfloat zNear, GC3Dfloat zFar) 1719 void WebGLRenderingContext::depthRange(GC3Dfloat zNear, GC3Dfloat zFar)
1720 { 1720 {
1721 if (isContextLost()) 1721 if (isContextLost())
1722 return; 1722 return;
1723 if (zNear > zFar) { 1723 if (zNear > zFar) {
1724 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "depthRange", "z Near > zFar"); 1724 synthesizeGLError(GL_INVALID_OPERATION, "depthRange", "zNear > zFar");
1725 return; 1725 return;
1726 } 1726 }
1727 m_context->depthRange(zNear, zFar); 1727 m_context->depthRange(zNear, zFar);
1728 } 1728 }
1729 1729
1730 void WebGLRenderingContext::detachShader(WebGLProgram* program, WebGLShader* sha der) 1730 void WebGLRenderingContext::detachShader(WebGLProgram* program, WebGLShader* sha der)
1731 { 1731 {
1732 if (isContextLost() || !validateWebGLObject("detachShader", program) || !val idateWebGLObject("detachShader", shader)) 1732 if (isContextLost() || !validateWebGLObject("detachShader", program) || !val idateWebGLObject("detachShader", shader))
1733 return; 1733 return;
1734 if (!program->detachShader(shader)) { 1734 if (!program->detachShader(shader)) {
1735 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "detachShader", "shader not attached"); 1735 synthesizeGLError(GL_INVALID_OPERATION, "detachShader", "shader not atta ched");
1736 return; 1736 return;
1737 } 1737 }
1738 m_context->detachShader(objectOrZero(program), objectOrZero(shader)); 1738 m_context->detachShader(objectOrZero(program), objectOrZero(shader));
1739 shader->onDetached(graphicsContext3D()); 1739 shader->onDetached(graphicsContext3D());
1740 } 1740 }
1741 1741
1742 void WebGLRenderingContext::disable(GC3Denum cap) 1742 void WebGLRenderingContext::disable(GC3Denum cap)
1743 { 1743 {
1744 if (isContextLost() || !validateCapability("disable", cap)) 1744 if (isContextLost() || !validateCapability("disable", cap))
1745 return; 1745 return;
1746 if (cap == GraphicsContext3D::STENCIL_TEST) { 1746 if (cap == GL_STENCIL_TEST) {
1747 m_stencilEnabled = false; 1747 m_stencilEnabled = false;
1748 applyStencilTest(); 1748 applyStencilTest();
1749 return; 1749 return;
1750 } 1750 }
1751 if (cap == GraphicsContext3D::SCISSOR_TEST) { 1751 if (cap == GL_SCISSOR_TEST) {
1752 m_scissorEnabled = false; 1752 m_scissorEnabled = false;
1753 m_drawingBuffer->setScissorEnabled(m_scissorEnabled); 1753 m_drawingBuffer->setScissorEnabled(m_scissorEnabled);
1754 } 1754 }
1755 m_context->disable(cap); 1755 m_context->disable(cap);
1756 } 1756 }
1757 1757
1758 void WebGLRenderingContext::disableVertexAttribArray(GC3Duint index) 1758 void WebGLRenderingContext::disableVertexAttribArray(GC3Duint index)
1759 { 1759 {
1760 if (isContextLost()) 1760 if (isContextLost())
1761 return; 1761 return;
1762 if (index >= m_maxVertexAttribs) { 1762 if (index >= m_maxVertexAttribs) {
1763 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "disableVertexAttrib Array", "index out of range"); 1763 synthesizeGLError(GL_INVALID_VALUE, "disableVertexAttribArray", "index o ut of range");
1764 return; 1764 return;
1765 } 1765 }
1766 1766
1767 WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArrayObje ct->getVertexAttribState(index); 1767 WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArrayObje ct->getVertexAttribState(index);
1768 state.enabled = false; 1768 state.enabled = false;
1769 1769
1770 // If the disabled index is the current maximum, trace backwards to find the new max enabled attrib index 1770 // If the disabled index is the current maximum, trace backwards to find the new max enabled attrib index
1771 if (m_onePlusMaxEnabledAttribIndex == index + 1) { 1771 if (m_onePlusMaxEnabledAttribIndex == index + 1) {
1772 findNewMaxEnabledAttribIndex(); 1772 findNewMaxEnabledAttribIndex();
1773 } 1773 }
(...skipping 13 matching lines...) Expand all
1787 && (!state.bufferBinding || !state.bufferBinding->object())) 1787 && (!state.bufferBinding || !state.bufferBinding->object()))
1788 return false; 1788 return false;
1789 } 1789 }
1790 1790
1791 return true; 1791 return true;
1792 } 1792 }
1793 1793
1794 bool WebGLRenderingContext::validateWebGLObject(const char* functionName, WebGLO bject* object) 1794 bool WebGLRenderingContext::validateWebGLObject(const char* functionName, WebGLO bject* object)
1795 { 1795 {
1796 if (!object || !object->object()) { 1796 if (!object || !object->object()) {
1797 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ob ject or object deleted"); 1797 synthesizeGLError(GL_INVALID_VALUE, functionName, "no object or object d eleted");
1798 return false; 1798 return false;
1799 } 1799 }
1800 if (!object->validate(contextGroup(), this)) { 1800 if (!object->validate(contextGroup(), this)) {
1801 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "o bject does not belong to this context"); 1801 synthesizeGLError(GL_INVALID_OPERATION, functionName, "object does not b elong to this context");
1802 return false; 1802 return false;
1803 } 1803 }
1804 return true; 1804 return true;
1805 } 1805 }
1806 1806
1807 void WebGLRenderingContext::drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei c ount) 1807 void WebGLRenderingContext::drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei c ount)
1808 { 1808 {
1809 if (!validateDrawArrays("drawArrays", mode, first, count)) 1809 if (!validateDrawArrays("drawArrays", mode, first, count))
1810 return; 1810 return;
1811 1811
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1859 handleTextureCompleteness("drawElementsInstancedANGLE", true); 1859 handleTextureCompleteness("drawElementsInstancedANGLE", true);
1860 m_context->extensions()->drawElementsInstancedANGLE(mode, count, type, stati c_cast<GC3Dintptr>(offset), primcount); 1860 m_context->extensions()->drawElementsInstancedANGLE(mode, count, type, stati c_cast<GC3Dintptr>(offset), primcount);
1861 handleTextureCompleteness("drawElementsInstancedANGLE", false); 1861 handleTextureCompleteness("drawElementsInstancedANGLE", false);
1862 markContextChanged(); 1862 markContextChanged();
1863 } 1863 }
1864 1864
1865 void WebGLRenderingContext::enable(GC3Denum cap) 1865 void WebGLRenderingContext::enable(GC3Denum cap)
1866 { 1866 {
1867 if (isContextLost() || !validateCapability("enable", cap)) 1867 if (isContextLost() || !validateCapability("enable", cap))
1868 return; 1868 return;
1869 if (cap == GraphicsContext3D::STENCIL_TEST) { 1869 if (cap == GL_STENCIL_TEST) {
1870 m_stencilEnabled = true; 1870 m_stencilEnabled = true;
1871 applyStencilTest(); 1871 applyStencilTest();
1872 return; 1872 return;
1873 } 1873 }
1874 if (cap == GraphicsContext3D::SCISSOR_TEST) { 1874 if (cap == GL_SCISSOR_TEST) {
1875 m_scissorEnabled = true; 1875 m_scissorEnabled = true;
1876 m_drawingBuffer->setScissorEnabled(m_scissorEnabled); 1876 m_drawingBuffer->setScissorEnabled(m_scissorEnabled);
1877 } 1877 }
1878 m_context->enable(cap); 1878 m_context->enable(cap);
1879 } 1879 }
1880 1880
1881 void WebGLRenderingContext::enableVertexAttribArray(GC3Duint index) 1881 void WebGLRenderingContext::enableVertexAttribArray(GC3Duint index)
1882 { 1882 {
1883 if (isContextLost()) 1883 if (isContextLost())
1884 return; 1884 return;
1885 if (index >= m_maxVertexAttribs) { 1885 if (index >= m_maxVertexAttribs) {
1886 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "enableVertexAttribA rray", "index out of range"); 1886 synthesizeGLError(GL_INVALID_VALUE, "enableVertexAttribArray", "index ou t of range");
1887 return; 1887 return;
1888 } 1888 }
1889 1889
1890 WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArrayObje ct->getVertexAttribState(index); 1890 WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArrayObje ct->getVertexAttribState(index);
1891 state.enabled = true; 1891 state.enabled = true;
1892 1892
1893 m_onePlusMaxEnabledAttribIndex = max(index + 1, m_onePlusMaxEnabledAttribInd ex); 1893 m_onePlusMaxEnabledAttribIndex = max(index + 1, m_onePlusMaxEnabledAttribInd ex);
1894 1894
1895 m_context->enableVertexAttribArray(index); 1895 m_context->enableVertexAttribArray(index);
1896 } 1896 }
1897 1897
1898 void WebGLRenderingContext::finish() 1898 void WebGLRenderingContext::finish()
1899 { 1899 {
1900 if (isContextLost()) 1900 if (isContextLost())
1901 return; 1901 return;
1902 m_context->flush(); // Intentionally a flush, not a finish. 1902 m_context->flush(); // Intentionally a flush, not a finish.
1903 } 1903 }
1904 1904
1905 void WebGLRenderingContext::flush() 1905 void WebGLRenderingContext::flush()
1906 { 1906 {
1907 if (isContextLost()) 1907 if (isContextLost())
1908 return; 1908 return;
1909 m_context->flush(); 1909 m_context->flush();
1910 } 1910 }
1911 1911
1912 void WebGLRenderingContext::framebufferRenderbuffer(GC3Denum target, GC3Denum at tachment, GC3Denum renderbuffertarget, WebGLRenderbuffer* buffer) 1912 void WebGLRenderingContext::framebufferRenderbuffer(GC3Denum target, GC3Denum at tachment, GC3Denum renderbuffertarget, WebGLRenderbuffer* buffer)
1913 { 1913 {
1914 if (isContextLost() || !validateFramebufferFuncParameters("framebufferRender buffer", target, attachment)) 1914 if (isContextLost() || !validateFramebufferFuncParameters("framebufferRender buffer", target, attachment))
1915 return; 1915 return;
1916 if (renderbuffertarget != GraphicsContext3D::RENDERBUFFER) { 1916 if (renderbuffertarget != GL_RENDERBUFFER) {
1917 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "framebufferRenderbuf fer", "invalid target"); 1917 synthesizeGLError(GL_INVALID_ENUM, "framebufferRenderbuffer", "invalid t arget");
1918 return; 1918 return;
1919 } 1919 }
1920 if (buffer && !buffer->validate(contextGroup(), this)) { 1920 if (buffer && !buffer->validate(contextGroup(), this)) {
1921 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "framebufferRend erbuffer", "no buffer or buffer not from this context"); 1921 synthesizeGLError(GL_INVALID_OPERATION, "framebufferRenderbuffer", "no b uffer or buffer not from this context");
1922 return; 1922 return;
1923 } 1923 }
1924 // Don't allow the default framebuffer to be mutated; all current 1924 // Don't allow the default framebuffer to be mutated; all current
1925 // implementations use an FBO internally in place of the default 1925 // implementations use an FBO internally in place of the default
1926 // FBO. 1926 // FBO.
1927 if (!m_framebufferBinding || !m_framebufferBinding->object()) { 1927 if (!m_framebufferBinding || !m_framebufferBinding->object()) {
1928 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "framebufferRend erbuffer", "no framebuffer bound"); 1928 synthesizeGLError(GL_INVALID_OPERATION, "framebufferRenderbuffer", "no f ramebuffer bound");
1929 return; 1929 return;
1930 } 1930 }
1931 Platform3DObject bufferObject = objectOrZero(buffer); 1931 Platform3DObject bufferObject = objectOrZero(buffer);
1932 switch (attachment) { 1932 switch (attachment) {
1933 case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT: 1933 case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL:
1934 if (isDepthStencilSupported() || !buffer) { 1934 if (isDepthStencilSupported() || !buffer) {
1935 m_context->framebufferRenderbuffer(target, GraphicsContext3D::DEPTH_ ATTACHMENT, renderbuffertarget, bufferObject); 1935 m_context->framebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT, rend erbuffertarget, bufferObject);
1936 m_context->framebufferRenderbuffer(target, GraphicsContext3D::STENCI L_ATTACHMENT, renderbuffertarget, bufferObject); 1936 m_context->framebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT, re nderbuffertarget, bufferObject);
1937 } else { 1937 } else {
1938 WebGLRenderbuffer* emulatedStencilBuffer = ensureEmulatedStencilBuff er(renderbuffertarget, buffer); 1938 WebGLRenderbuffer* emulatedStencilBuffer = ensureEmulatedStencilBuff er(renderbuffertarget, buffer);
1939 if (!emulatedStencilBuffer) { 1939 if (!emulatedStencilBuffer) {
1940 synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY, "framebuffer Renderbuffer", "out of memory"); 1940 synthesizeGLError(GL_OUT_OF_MEMORY, "framebufferRenderbuffer", " out of memory");
1941 return; 1941 return;
1942 } 1942 }
1943 m_context->framebufferRenderbuffer(target, GraphicsContext3D::DEPTH_ ATTACHMENT, renderbuffertarget, bufferObject); 1943 m_context->framebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT, rend erbuffertarget, bufferObject);
1944 m_context->framebufferRenderbuffer(target, GraphicsContext3D::STENCI L_ATTACHMENT, renderbuffertarget, objectOrZero(emulatedStencilBuffer)); 1944 m_context->framebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT, re nderbuffertarget, objectOrZero(emulatedStencilBuffer));
1945 } 1945 }
1946 break; 1946 break;
1947 default: 1947 default:
1948 m_context->framebufferRenderbuffer(target, attachment, renderbuffertarge t, bufferObject); 1948 m_context->framebufferRenderbuffer(target, attachment, renderbuffertarge t, bufferObject);
1949 } 1949 }
1950 m_framebufferBinding->setAttachmentForBoundFramebuffer(attachment, buffer); 1950 m_framebufferBinding->setAttachmentForBoundFramebuffer(attachment, buffer);
1951 applyStencilTest(); 1951 applyStencilTest();
1952 } 1952 }
1953 1953
1954 void WebGLRenderingContext::framebufferTexture2D(GC3Denum target, GC3Denum attac hment, GC3Denum textarget, WebGLTexture* texture, GC3Dint level) 1954 void WebGLRenderingContext::framebufferTexture2D(GC3Denum target, GC3Denum attac hment, GC3Denum textarget, WebGLTexture* texture, GC3Dint level)
1955 { 1955 {
1956 if (isContextLost() || !validateFramebufferFuncParameters("framebufferTextur e2D", target, attachment)) 1956 if (isContextLost() || !validateFramebufferFuncParameters("framebufferTextur e2D", target, attachment))
1957 return; 1957 return;
1958 if (level) { 1958 if (level) {
1959 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "framebufferTexture2 D", "level not 0"); 1959 synthesizeGLError(GL_INVALID_VALUE, "framebufferTexture2D", "level not 0 ");
1960 return; 1960 return;
1961 } 1961 }
1962 if (texture && !texture->validate(contextGroup(), this)) { 1962 if (texture && !texture->validate(contextGroup(), this)) {
1963 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "framebufferText ure2D", "no texture or texture not from this context"); 1963 synthesizeGLError(GL_INVALID_OPERATION, "framebufferTexture2D", "no text ure or texture not from this context");
1964 return; 1964 return;
1965 } 1965 }
1966 // Don't allow the default framebuffer to be mutated; all current 1966 // Don't allow the default framebuffer to be mutated; all current
1967 // implementations use an FBO internally in place of the default 1967 // implementations use an FBO internally in place of the default
1968 // FBO. 1968 // FBO.
1969 if (!m_framebufferBinding || !m_framebufferBinding->object()) { 1969 if (!m_framebufferBinding || !m_framebufferBinding->object()) {
1970 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "framebufferText ure2D", "no framebuffer bound"); 1970 synthesizeGLError(GL_INVALID_OPERATION, "framebufferTexture2D", "no fram ebuffer bound");
1971 return; 1971 return;
1972 } 1972 }
1973 Platform3DObject textureObject = objectOrZero(texture); 1973 Platform3DObject textureObject = objectOrZero(texture);
1974 switch (attachment) { 1974 switch (attachment) {
1975 case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT: 1975 case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL:
1976 m_context->framebufferTexture2D(target, GraphicsContext3D::DEPTH_ATTACHM ENT, textarget, textureObject, level); 1976 m_context->framebufferTexture2D(target, GL_DEPTH_ATTACHMENT, textarget, textureObject, level);
1977 m_context->framebufferTexture2D(target, GraphicsContext3D::STENCIL_ATTAC HMENT, textarget, textureObject, level); 1977 m_context->framebufferTexture2D(target, GL_STENCIL_ATTACHMENT, textarget , textureObject, level);
1978 break; 1978 break;
1979 case GraphicsContext3D::DEPTH_ATTACHMENT: 1979 case GL_DEPTH_ATTACHMENT:
1980 m_context->framebufferTexture2D(target, attachment, textarget, textureOb ject, level); 1980 m_context->framebufferTexture2D(target, attachment, textarget, textureOb ject, level);
1981 break; 1981 break;
1982 case GraphicsContext3D::STENCIL_ATTACHMENT: 1982 case GL_STENCIL_ATTACHMENT:
1983 m_context->framebufferTexture2D(target, attachment, textarget, textureOb ject, level); 1983 m_context->framebufferTexture2D(target, attachment, textarget, textureOb ject, level);
1984 break; 1984 break;
1985 default: 1985 default:
1986 m_context->framebufferTexture2D(target, attachment, textarget, textureOb ject, level); 1986 m_context->framebufferTexture2D(target, attachment, textarget, textureOb ject, level);
1987 } 1987 }
1988 m_framebufferBinding->setAttachmentForBoundFramebuffer(attachment, textarget , texture, level); 1988 m_framebufferBinding->setAttachmentForBoundFramebuffer(attachment, textarget , texture, level);
1989 applyStencilTest(); 1989 applyStencilTest();
1990 } 1990 }
1991 1991
1992 void WebGLRenderingContext::frontFace(GC3Denum mode) 1992 void WebGLRenderingContext::frontFace(GC3Denum mode)
1993 { 1993 {
1994 if (isContextLost()) 1994 if (isContextLost())
1995 return; 1995 return;
1996 switch (mode) { 1996 switch (mode) {
1997 case GraphicsContext3D::CW: 1997 case GL_CW:
1998 case GraphicsContext3D::CCW: 1998 case GL_CCW:
1999 break; 1999 break;
2000 default: 2000 default:
2001 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "frontFace", "invalid mode"); 2001 synthesizeGLError(GL_INVALID_ENUM, "frontFace", "invalid mode");
2002 return; 2002 return;
2003 } 2003 }
2004 m_context->frontFace(mode); 2004 m_context->frontFace(mode);
2005 } 2005 }
2006 2006
2007 void WebGLRenderingContext::generateMipmap(GC3Denum target) 2007 void WebGLRenderingContext::generateMipmap(GC3Denum target)
2008 { 2008 {
2009 if (isContextLost()) 2009 if (isContextLost())
2010 return; 2010 return;
2011 WebGLTexture* tex = validateTextureBinding("generateMipmap", target, false); 2011 WebGLTexture* tex = validateTextureBinding("generateMipmap", target, false);
2012 if (!tex) 2012 if (!tex)
2013 return; 2013 return;
2014 if (!tex->canGenerateMipmaps()) { 2014 if (!tex->canGenerateMipmaps()) {
2015 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "generateMipmap" , "level 0 not power of 2 or not all the same size"); 2015 synthesizeGLError(GL_INVALID_OPERATION, "generateMipmap", "level 0 not p ower of 2 or not all the same size");
2016 return; 2016 return;
2017 } 2017 }
2018 if (!validateSettableTexFormat("generateMipmap", tex->getInternalFormat(targ et, 0))) 2018 if (!validateSettableTexFormat("generateMipmap", tex->getInternalFormat(targ et, 0)))
2019 return; 2019 return;
2020 2020
2021 // generateMipmap won't work properly if minFilter is not NEAREST_MIPMAP_LIN EAR 2021 // generateMipmap won't work properly if minFilter is not NEAREST_MIPMAP_LIN EAR
2022 // on Mac. Remove the hack once this driver bug is fixed. 2022 // on Mac. Remove the hack once this driver bug is fixed.
2023 #if OS(MACOSX) 2023 #if OS(MACOSX)
2024 bool needToResetMinFilter = false; 2024 bool needToResetMinFilter = false;
2025 if (tex->getMinFilter() != GraphicsContext3D::NEAREST_MIPMAP_LINEAR) { 2025 if (tex->getMinFilter() != GL_NEAREST_MIPMAP_LINEAR) {
2026 m_context->texParameteri(target, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::NEAREST_MIPMAP_LINEAR); 2026 m_context->texParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMA P_LINEAR);
2027 needToResetMinFilter = true; 2027 needToResetMinFilter = true;
2028 } 2028 }
2029 #endif 2029 #endif
2030 m_context->generateMipmap(target); 2030 m_context->generateMipmap(target);
2031 #if OS(MACOSX) 2031 #if OS(MACOSX)
2032 if (needToResetMinFilter) 2032 if (needToResetMinFilter)
2033 m_context->texParameteri(target, GraphicsContext3D::TEXTURE_MIN_FILTER, tex->getMinFilter()); 2033 m_context->texParameteri(target, GL_TEXTURE_MIN_FILTER, tex->getMinFilte r());
2034 #endif 2034 #endif
2035 tex->generateMipmapLevelInfo(); 2035 tex->generateMipmapLevelInfo();
2036 } 2036 }
2037 2037
2038 PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveAttrib(WebGLProgram* program, GC3Duint index) 2038 PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveAttrib(WebGLProgram* program, GC3Duint index)
2039 { 2039 {
2040 if (isContextLost() || !validateWebGLObject("getActiveAttrib", program)) 2040 if (isContextLost() || !validateWebGLObject("getActiveAttrib", program))
2041 return 0; 2041 return 0;
2042 ActiveInfo info; 2042 ActiveInfo info;
2043 if (!m_context->getActiveAttrib(objectOrZero(program), index, info)) 2043 if (!m_context->getActiveAttrib(objectOrZero(program), index, info))
(...skipping 11 matching lines...) Expand all
2055 return WebGLActiveInfo::create(info.name, info.type, info.size); 2055 return WebGLActiveInfo::create(info.name, info.type, info.size);
2056 } 2056 }
2057 2057
2058 bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Ref Ptr<WebGLShader> >& shaderObjects) 2058 bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Ref Ptr<WebGLShader> >& shaderObjects)
2059 { 2059 {
2060 shaderObjects.clear(); 2060 shaderObjects.clear();
2061 if (isContextLost() || !validateWebGLObject("getAttachedShaders", program)) 2061 if (isContextLost() || !validateWebGLObject("getAttachedShaders", program))
2062 return false; 2062 return false;
2063 2063
2064 const GC3Denum shaderType[] = { 2064 const GC3Denum shaderType[] = {
2065 GraphicsContext3D::VERTEX_SHADER, 2065 GL_VERTEX_SHADER,
2066 GraphicsContext3D::FRAGMENT_SHADER 2066 GL_FRAGMENT_SHADER
2067 }; 2067 };
2068 for (unsigned i = 0; i < sizeof(shaderType) / sizeof(GC3Denum); ++i) { 2068 for (unsigned i = 0; i < sizeof(shaderType) / sizeof(GC3Denum); ++i) {
2069 WebGLShader* shader = program->getAttachedShader(shaderType[i]); 2069 WebGLShader* shader = program->getAttachedShader(shaderType[i]);
2070 if (shader) 2070 if (shader)
2071 shaderObjects.append(shader); 2071 shaderObjects.append(shader);
2072 } 2072 }
2073 return true; 2073 return true;
2074 } 2074 }
2075 2075
2076 GC3Dint WebGLRenderingContext::getAttribLocation(WebGLProgram* program, const St ring& name) 2076 GC3Dint WebGLRenderingContext::getAttribLocation(WebGLProgram* program, const St ring& name)
2077 { 2077 {
2078 if (isContextLost() || !validateWebGLObject("getAttribLocation", program)) 2078 if (isContextLost() || !validateWebGLObject("getAttribLocation", program))
2079 return -1; 2079 return -1;
2080 if (!validateLocationLength("getAttribLocation", name)) 2080 if (!validateLocationLength("getAttribLocation", name))
2081 return -1; 2081 return -1;
2082 if (!validateString("getAttribLocation", name)) 2082 if (!validateString("getAttribLocation", name))
2083 return -1; 2083 return -1;
2084 if (isPrefixReserved(name)) 2084 if (isPrefixReserved(name))
2085 return -1; 2085 return -1;
2086 if (!program->linkStatus()) { 2086 if (!program->linkStatus()) {
2087 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "getAttribLocati on", "program not linked"); 2087 synthesizeGLError(GL_INVALID_OPERATION, "getAttribLocation", "program no t linked");
2088 return 0; 2088 return 0;
2089 } 2089 }
2090 return m_context->getAttribLocation(objectOrZero(program), name); 2090 return m_context->getAttribLocation(objectOrZero(program), name);
2091 } 2091 }
2092 2092
2093 WebGLGetInfo WebGLRenderingContext::getBufferParameter(GC3Denum target, GC3Denum pname) 2093 WebGLGetInfo WebGLRenderingContext::getBufferParameter(GC3Denum target, GC3Denum pname)
2094 { 2094 {
2095 if (isContextLost()) 2095 if (isContextLost())
2096 return WebGLGetInfo(); 2096 return WebGLGetInfo();
2097 if (target != GraphicsContext3D::ARRAY_BUFFER && target != GraphicsContext3D ::ELEMENT_ARRAY_BUFFER) { 2097 if (target != GL_ARRAY_BUFFER && target != GL_ELEMENT_ARRAY_BUFFER) {
2098 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getBufferParameter", "invalid target"); 2098 synthesizeGLError(GL_INVALID_ENUM, "getBufferParameter", "invalid target ");
2099 return WebGLGetInfo(); 2099 return WebGLGetInfo();
2100 } 2100 }
2101 2101
2102 if (pname != GraphicsContext3D::BUFFER_SIZE && pname != GraphicsContext3D::B UFFER_USAGE) { 2102 if (pname != GL_BUFFER_SIZE && pname != GL_BUFFER_USAGE) {
2103 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getBufferParameter", "invalid parameter name"); 2103 synthesizeGLError(GL_INVALID_ENUM, "getBufferParameter", "invalid parame ter name");
2104 return WebGLGetInfo(); 2104 return WebGLGetInfo();
2105 } 2105 }
2106 2106
2107 GC3Dint value = 0; 2107 GC3Dint value = 0;
2108 m_context->getBufferParameteriv(target, pname, &value); 2108 m_context->getBufferParameteriv(target, pname, &value);
2109 if (pname == GraphicsContext3D::BUFFER_SIZE) 2109 if (pname == GL_BUFFER_SIZE)
2110 return WebGLGetInfo(value); 2110 return WebGLGetInfo(value);
2111 return WebGLGetInfo(static_cast<unsigned int>(value)); 2111 return WebGLGetInfo(static_cast<unsigned int>(value));
2112 } 2112 }
2113 2113
2114 PassRefPtr<WebGLContextAttributes> WebGLRenderingContext::getContextAttributes() 2114 PassRefPtr<WebGLContextAttributes> WebGLRenderingContext::getContextAttributes()
2115 { 2115 {
2116 if (isContextLost()) 2116 if (isContextLost())
2117 return 0; 2117 return 0;
2118 // We always need to return a new WebGLContextAttributes object to 2118 // We always need to return a new WebGLContextAttributes object to
2119 // prevent the user from mutating any cached version. 2119 // prevent the user from mutating any cached version.
(...skipping 14 matching lines...) Expand all
2134 2134
2135 GC3Denum WebGLRenderingContext::getError() 2135 GC3Denum WebGLRenderingContext::getError()
2136 { 2136 {
2137 if (lost_context_errors_.size()) { 2137 if (lost_context_errors_.size()) {
2138 GC3Denum err = lost_context_errors_.first(); 2138 GC3Denum err = lost_context_errors_.first();
2139 lost_context_errors_.remove(0); 2139 lost_context_errors_.remove(0);
2140 return err; 2140 return err;
2141 } 2141 }
2142 2142
2143 if (isContextLost()) 2143 if (isContextLost())
2144 return GraphicsContext3D::NO_ERROR; 2144 return GL_NO_ERROR;
2145 2145
2146 return m_context->getError(); 2146 return m_context->getError();
2147 } 2147 }
2148 2148
2149 bool WebGLRenderingContext::ExtensionTracker::matchesNameWithPrefixes(const Stri ng& name) const 2149 bool WebGLRenderingContext::ExtensionTracker::matchesNameWithPrefixes(const Stri ng& name) const
2150 { 2150 {
2151 static const char* const unprefixed[] = { "", 0, }; 2151 static const char* const unprefixed[] = { "", 0, };
2152 2152
2153 const char* const* prefixes = m_prefixes ? m_prefixes : unprefixed; 2153 const char* const* prefixes = m_prefixes ? m_prefixes : unprefixed;
2154 for (; *prefixes; ++prefixes) { 2154 for (; *prefixes; ++prefixes) {
(...skipping 27 matching lines...) Expand all
2182 2182
2183 return 0; 2183 return 0;
2184 } 2184 }
2185 2185
2186 WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(GC3Denum t arget, GC3Denum attachment, GC3Denum pname) 2186 WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(GC3Denum t arget, GC3Denum attachment, GC3Denum pname)
2187 { 2187 {
2188 if (isContextLost() || !validateFramebufferFuncParameters("getFramebufferAtt achmentParameter", target, attachment)) 2188 if (isContextLost() || !validateFramebufferFuncParameters("getFramebufferAtt achmentParameter", target, attachment))
2189 return WebGLGetInfo(); 2189 return WebGLGetInfo();
2190 2190
2191 if (!m_framebufferBinding || !m_framebufferBinding->object()) { 2191 if (!m_framebufferBinding || !m_framebufferBinding->object()) {
2192 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "getFramebufferA ttachmentParameter", "no framebuffer bound"); 2192 synthesizeGLError(GL_INVALID_OPERATION, "getFramebufferAttachmentParamet er", "no framebuffer bound");
2193 return WebGLGetInfo(); 2193 return WebGLGetInfo();
2194 } 2194 }
2195 2195
2196 WebGLSharedObject* object = m_framebufferBinding->getAttachmentObject(attach ment); 2196 WebGLSharedObject* object = m_framebufferBinding->getAttachmentObject(attach ment);
2197 if (!object) { 2197 if (!object) {
2198 if (pname == GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) 2198 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)
2199 return WebGLGetInfo(GraphicsContext3D::NONE); 2199 return WebGLGetInfo(GL_NONE);
2200 // OpenGL ES 2.0 specifies INVALID_ENUM in this case, while desktop GL 2200 // OpenGL ES 2.0 specifies INVALID_ENUM in this case, while desktop GL
2201 // specifies INVALID_OPERATION. 2201 // specifies INVALID_OPERATION.
2202 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getFramebufferAttach mentParameter", "invalid parameter name"); 2202 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter", "invalid parameter name");
2203 return WebGLGetInfo(); 2203 return WebGLGetInfo();
2204 } 2204 }
2205 2205
2206 ASSERT(object->isTexture() || object->isRenderbuffer()); 2206 ASSERT(object->isTexture() || object->isRenderbuffer());
2207 if (object->isTexture()) { 2207 if (object->isTexture()) {
2208 switch (pname) { 2208 switch (pname) {
2209 case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 2209 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
2210 return WebGLGetInfo(GraphicsContext3D::TEXTURE); 2210 return WebGLGetInfo(GL_TEXTURE);
2211 case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 2211 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
2212 return WebGLGetInfo(PassRefPtr<WebGLTexture>(static_cast<WebGLTextur e*>(object))); 2212 return WebGLGetInfo(PassRefPtr<WebGLTexture>(static_cast<WebGLTextur e*>(object)));
2213 case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 2213 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
2214 case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 2214 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
2215 { 2215 {
2216 GC3Dint value = 0; 2216 GC3Dint value = 0;
2217 m_context->getFramebufferAttachmentParameteriv(target, attachmen t, pname, &value); 2217 m_context->getFramebufferAttachmentParameteriv(target, attachmen t, pname, &value);
2218 return WebGLGetInfo(value); 2218 return WebGLGetInfo(value);
2219 } 2219 }
2220 default: 2220 default:
2221 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getFramebufferAt tachmentParameter", "invalid parameter name for texture attachment"); 2221 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete r", "invalid parameter name for texture attachment");
2222 return WebGLGetInfo(); 2222 return WebGLGetInfo();
2223 } 2223 }
2224 } else { 2224 } else {
2225 switch (pname) { 2225 switch (pname) {
2226 case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 2226 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
2227 return WebGLGetInfo(GraphicsContext3D::RENDERBUFFER); 2227 return WebGLGetInfo(GL_RENDERBUFFER);
2228 case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 2228 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
2229 return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(static_cast<WebGLR enderbuffer*>(object))); 2229 return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(static_cast<WebGLR enderbuffer*>(object)));
2230 default: 2230 default:
2231 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getFramebufferAt tachmentParameter", "invalid parameter name for renderbuffer attachment"); 2231 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete r", "invalid parameter name for renderbuffer attachment");
2232 return WebGLGetInfo(); 2232 return WebGLGetInfo();
2233 } 2233 }
2234 } 2234 }
2235 } 2235 }
2236 2236
2237 WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname) 2237 WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname)
2238 { 2238 {
2239 if (isContextLost()) 2239 if (isContextLost())
2240 return WebGLGetInfo(); 2240 return WebGLGetInfo();
2241 const int intZero = 0; 2241 const int intZero = 0;
2242 switch (pname) { 2242 switch (pname) {
2243 case GraphicsContext3D::ACTIVE_TEXTURE: 2243 case GL_ACTIVE_TEXTURE:
2244 return getUnsignedIntParameter(pname); 2244 return getUnsignedIntParameter(pname);
2245 case GraphicsContext3D::ALIASED_LINE_WIDTH_RANGE: 2245 case GL_ALIASED_LINE_WIDTH_RANGE:
2246 return getWebGLFloatArrayParameter(pname); 2246 return getWebGLFloatArrayParameter(pname);
2247 case GraphicsContext3D::ALIASED_POINT_SIZE_RANGE: 2247 case GL_ALIASED_POINT_SIZE_RANGE:
2248 return getWebGLFloatArrayParameter(pname); 2248 return getWebGLFloatArrayParameter(pname);
2249 case GraphicsContext3D::ALPHA_BITS: 2249 case GL_ALPHA_BITS:
2250 return getIntParameter(pname); 2250 return getIntParameter(pname);
2251 case GraphicsContext3D::ARRAY_BUFFER_BINDING: 2251 case GL_ARRAY_BUFFER_BINDING:
2252 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(m_boundArrayBuffer)); 2252 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(m_boundArrayBuffer));
2253 case GraphicsContext3D::BLEND: 2253 case GL_BLEND:
2254 return getBooleanParameter(pname); 2254 return getBooleanParameter(pname);
2255 case GraphicsContext3D::BLEND_COLOR: 2255 case GL_BLEND_COLOR:
2256 return getWebGLFloatArrayParameter(pname); 2256 return getWebGLFloatArrayParameter(pname);
2257 case GraphicsContext3D::BLEND_DST_ALPHA: 2257 case GL_BLEND_DST_ALPHA:
2258 return getUnsignedIntParameter(pname); 2258 return getUnsignedIntParameter(pname);
2259 case GraphicsContext3D::BLEND_DST_RGB: 2259 case GL_BLEND_DST_RGB:
2260 return getUnsignedIntParameter(pname); 2260 return getUnsignedIntParameter(pname);
2261 case GraphicsContext3D::BLEND_EQUATION_ALPHA: 2261 case GL_BLEND_EQUATION_ALPHA:
2262 return getUnsignedIntParameter(pname); 2262 return getUnsignedIntParameter(pname);
2263 case GraphicsContext3D::BLEND_EQUATION_RGB: 2263 case GL_BLEND_EQUATION_RGB:
2264 return getUnsignedIntParameter(pname); 2264 return getUnsignedIntParameter(pname);
2265 case GraphicsContext3D::BLEND_SRC_ALPHA: 2265 case GL_BLEND_SRC_ALPHA:
2266 return getUnsignedIntParameter(pname); 2266 return getUnsignedIntParameter(pname);
2267 case GraphicsContext3D::BLEND_SRC_RGB: 2267 case GL_BLEND_SRC_RGB:
2268 return getUnsignedIntParameter(pname); 2268 return getUnsignedIntParameter(pname);
2269 case GraphicsContext3D::BLUE_BITS: 2269 case GL_BLUE_BITS:
2270 return getIntParameter(pname); 2270 return getIntParameter(pname);
2271 case GraphicsContext3D::COLOR_CLEAR_VALUE: 2271 case GL_COLOR_CLEAR_VALUE:
2272 return getWebGLFloatArrayParameter(pname); 2272 return getWebGLFloatArrayParameter(pname);
2273 case GraphicsContext3D::COLOR_WRITEMASK: 2273 case GL_COLOR_WRITEMASK:
2274 return getBooleanArrayParameter(pname); 2274 return getBooleanArrayParameter(pname);
2275 case GraphicsContext3D::COMPRESSED_TEXTURE_FORMATS: 2275 case GL_COMPRESSED_TEXTURE_FORMATS:
2276 return WebGLGetInfo(Uint32Array::create(m_compressedTextureFormats.data( ), m_compressedTextureFormats.size())); 2276 return WebGLGetInfo(Uint32Array::create(m_compressedTextureFormats.data( ), m_compressedTextureFormats.size()));
2277 case GraphicsContext3D::CULL_FACE: 2277 case GL_CULL_FACE:
2278 return getBooleanParameter(pname); 2278 return getBooleanParameter(pname);
2279 case GraphicsContext3D::CULL_FACE_MODE: 2279 case GL_CULL_FACE_MODE:
2280 return getUnsignedIntParameter(pname); 2280 return getUnsignedIntParameter(pname);
2281 case GraphicsContext3D::CURRENT_PROGRAM: 2281 case GL_CURRENT_PROGRAM:
2282 return WebGLGetInfo(PassRefPtr<WebGLProgram>(m_currentProgram)); 2282 return WebGLGetInfo(PassRefPtr<WebGLProgram>(m_currentProgram));
2283 case GraphicsContext3D::DEPTH_BITS: 2283 case GL_DEPTH_BITS:
2284 if (!m_framebufferBinding && !m_attributes.depth) 2284 if (!m_framebufferBinding && !m_attributes.depth)
2285 return WebGLGetInfo(intZero); 2285 return WebGLGetInfo(intZero);
2286 return getIntParameter(pname); 2286 return getIntParameter(pname);
2287 case GraphicsContext3D::DEPTH_CLEAR_VALUE: 2287 case GL_DEPTH_CLEAR_VALUE:
2288 return getFloatParameter(pname); 2288 return getFloatParameter(pname);
2289 case GraphicsContext3D::DEPTH_FUNC: 2289 case GL_DEPTH_FUNC:
2290 return getUnsignedIntParameter(pname); 2290 return getUnsignedIntParameter(pname);
2291 case GraphicsContext3D::DEPTH_RANGE: 2291 case GL_DEPTH_RANGE:
2292 return getWebGLFloatArrayParameter(pname); 2292 return getWebGLFloatArrayParameter(pname);
2293 case GraphicsContext3D::DEPTH_TEST: 2293 case GL_DEPTH_TEST:
2294 return getBooleanParameter(pname); 2294 return getBooleanParameter(pname);
2295 case GraphicsContext3D::DEPTH_WRITEMASK: 2295 case GL_DEPTH_WRITEMASK:
2296 return getBooleanParameter(pname); 2296 return getBooleanParameter(pname);
2297 case GraphicsContext3D::DITHER: 2297 case GL_DITHER:
2298 return getBooleanParameter(pname); 2298 return getBooleanParameter(pname);
2299 case GraphicsContext3D::ELEMENT_ARRAY_BUFFER_BINDING: 2299 case GL_ELEMENT_ARRAY_BUFFER_BINDING:
2300 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(m_boundVertexArrayObject->bo undElementArrayBuffer())); 2300 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(m_boundVertexArrayObject->bo undElementArrayBuffer()));
2301 case GraphicsContext3D::FRAMEBUFFER_BINDING: 2301 case GL_FRAMEBUFFER_BINDING:
2302 return WebGLGetInfo(PassRefPtr<WebGLFramebuffer>(m_framebufferBinding)); 2302 return WebGLGetInfo(PassRefPtr<WebGLFramebuffer>(m_framebufferBinding));
2303 case GraphicsContext3D::FRONT_FACE: 2303 case GL_FRONT_FACE:
2304 return getUnsignedIntParameter(pname); 2304 return getUnsignedIntParameter(pname);
2305 case GraphicsContext3D::GENERATE_MIPMAP_HINT: 2305 case GL_GENERATE_MIPMAP_HINT:
2306 return getUnsignedIntParameter(pname); 2306 return getUnsignedIntParameter(pname);
2307 case GraphicsContext3D::GREEN_BITS: 2307 case GL_GREEN_BITS:
2308 return getIntParameter(pname); 2308 return getIntParameter(pname);
2309 case GraphicsContext3D::LINE_WIDTH: 2309 case GL_LINE_WIDTH:
2310 return getFloatParameter(pname); 2310 return getFloatParameter(pname);
2311 case GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS: 2311 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
2312 return getIntParameter(pname); 2312 return getIntParameter(pname);
2313 case GraphicsContext3D::MAX_CUBE_MAP_TEXTURE_SIZE: 2313 case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
2314 return getIntParameter(pname); 2314 return getIntParameter(pname);
2315 case GraphicsContext3D::MAX_FRAGMENT_UNIFORM_VECTORS: 2315 case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
2316 return getIntParameter(pname); 2316 return getIntParameter(pname);
2317 case GraphicsContext3D::MAX_RENDERBUFFER_SIZE: 2317 case GL_MAX_RENDERBUFFER_SIZE:
2318 return getIntParameter(pname); 2318 return getIntParameter(pname);
2319 case GraphicsContext3D::MAX_TEXTURE_IMAGE_UNITS: 2319 case GL_MAX_TEXTURE_IMAGE_UNITS:
2320 return getIntParameter(pname); 2320 return getIntParameter(pname);
2321 case GraphicsContext3D::MAX_TEXTURE_SIZE: 2321 case GL_MAX_TEXTURE_SIZE:
2322 return getIntParameter(pname); 2322 return getIntParameter(pname);
2323 case GraphicsContext3D::MAX_VARYING_VECTORS: 2323 case GL_MAX_VARYING_VECTORS:
2324 return getIntParameter(pname); 2324 return getIntParameter(pname);
2325 case GraphicsContext3D::MAX_VERTEX_ATTRIBS: 2325 case GL_MAX_VERTEX_ATTRIBS:
2326 return getIntParameter(pname); 2326 return getIntParameter(pname);
2327 case GraphicsContext3D::MAX_VERTEX_TEXTURE_IMAGE_UNITS: 2327 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
2328 return getIntParameter(pname); 2328 return getIntParameter(pname);
2329 case GraphicsContext3D::MAX_VERTEX_UNIFORM_VECTORS: 2329 case GL_MAX_VERTEX_UNIFORM_VECTORS:
2330 return getIntParameter(pname); 2330 return getIntParameter(pname);
2331 case GraphicsContext3D::MAX_VIEWPORT_DIMS: 2331 case GL_MAX_VIEWPORT_DIMS:
2332 return getWebGLIntArrayParameter(pname); 2332 return getWebGLIntArrayParameter(pname);
2333 case GraphicsContext3D::NUM_SHADER_BINARY_FORMATS: 2333 case GL_NUM_SHADER_BINARY_FORMATS:
2334 // FIXME: should we always return 0 for this? 2334 // FIXME: should we always return 0 for this?
2335 return getIntParameter(pname); 2335 return getIntParameter(pname);
2336 case GraphicsContext3D::PACK_ALIGNMENT: 2336 case GL_PACK_ALIGNMENT:
2337 return getIntParameter(pname); 2337 return getIntParameter(pname);
2338 case GraphicsContext3D::POLYGON_OFFSET_FACTOR: 2338 case GL_POLYGON_OFFSET_FACTOR:
2339 return getFloatParameter(pname); 2339 return getFloatParameter(pname);
2340 case GraphicsContext3D::POLYGON_OFFSET_FILL: 2340 case GL_POLYGON_OFFSET_FILL:
2341 return getBooleanParameter(pname); 2341 return getBooleanParameter(pname);
2342 case GraphicsContext3D::POLYGON_OFFSET_UNITS: 2342 case GL_POLYGON_OFFSET_UNITS:
2343 return getFloatParameter(pname); 2343 return getFloatParameter(pname);
2344 case GraphicsContext3D::RED_BITS: 2344 case GL_RED_BITS:
2345 return getIntParameter(pname); 2345 return getIntParameter(pname);
2346 case GraphicsContext3D::RENDERBUFFER_BINDING: 2346 case GL_RENDERBUFFER_BINDING:
2347 return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(m_renderbufferBinding) ); 2347 return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(m_renderbufferBinding) );
2348 case GraphicsContext3D::RENDERER: 2348 case GL_RENDERER:
2349 return WebGLGetInfo(String("WebKit WebGL")); 2349 return WebGLGetInfo(String("WebKit WebGL"));
2350 case GraphicsContext3D::SAMPLE_BUFFERS: 2350 case GL_SAMPLE_BUFFERS:
2351 return getIntParameter(pname); 2351 return getIntParameter(pname);
2352 case GraphicsContext3D::SAMPLE_COVERAGE_INVERT: 2352 case GL_SAMPLE_COVERAGE_INVERT:
2353 return getBooleanParameter(pname); 2353 return getBooleanParameter(pname);
2354 case GraphicsContext3D::SAMPLE_COVERAGE_VALUE: 2354 case GL_SAMPLE_COVERAGE_VALUE:
2355 return getFloatParameter(pname); 2355 return getFloatParameter(pname);
2356 case GraphicsContext3D::SAMPLES: 2356 case GL_SAMPLES:
2357 return getIntParameter(pname); 2357 return getIntParameter(pname);
2358 case GraphicsContext3D::SCISSOR_BOX: 2358 case GL_SCISSOR_BOX:
2359 return getWebGLIntArrayParameter(pname); 2359 return getWebGLIntArrayParameter(pname);
2360 case GraphicsContext3D::SCISSOR_TEST: 2360 case GL_SCISSOR_TEST:
2361 return getBooleanParameter(pname); 2361 return getBooleanParameter(pname);
2362 case GraphicsContext3D::SHADING_LANGUAGE_VERSION: 2362 case GL_SHADING_LANGUAGE_VERSION:
2363 return WebGLGetInfo("WebGL GLSL ES 1.0 (" + m_context->getString(Graphic sContext3D::SHADING_LANGUAGE_VERSION) + ")"); 2363 return WebGLGetInfo("WebGL GLSL ES 1.0 (" + m_context->getString(GL_SHAD ING_LANGUAGE_VERSION) + ")");
2364 case GraphicsContext3D::STENCIL_BACK_FAIL: 2364 case GL_STENCIL_BACK_FAIL:
2365 return getUnsignedIntParameter(pname); 2365 return getUnsignedIntParameter(pname);
2366 case GraphicsContext3D::STENCIL_BACK_FUNC: 2366 case GL_STENCIL_BACK_FUNC:
2367 return getUnsignedIntParameter(pname); 2367 return getUnsignedIntParameter(pname);
2368 case GraphicsContext3D::STENCIL_BACK_PASS_DEPTH_FAIL: 2368 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
2369 return getUnsignedIntParameter(pname); 2369 return getUnsignedIntParameter(pname);
2370 case GraphicsContext3D::STENCIL_BACK_PASS_DEPTH_PASS: 2370 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
2371 return getUnsignedIntParameter(pname); 2371 return getUnsignedIntParameter(pname);
2372 case GraphicsContext3D::STENCIL_BACK_REF: 2372 case GL_STENCIL_BACK_REF:
2373 return getIntParameter(pname); 2373 return getIntParameter(pname);
2374 case GraphicsContext3D::STENCIL_BACK_VALUE_MASK: 2374 case GL_STENCIL_BACK_VALUE_MASK:
2375 return getUnsignedIntParameter(pname); 2375 return getUnsignedIntParameter(pname);
2376 case GraphicsContext3D::STENCIL_BACK_WRITEMASK: 2376 case GL_STENCIL_BACK_WRITEMASK:
2377 return getUnsignedIntParameter(pname); 2377 return getUnsignedIntParameter(pname);
2378 case GraphicsContext3D::STENCIL_BITS: 2378 case GL_STENCIL_BITS:
2379 if (!m_framebufferBinding && !m_attributes.stencil) 2379 if (!m_framebufferBinding && !m_attributes.stencil)
2380 return WebGLGetInfo(intZero); 2380 return WebGLGetInfo(intZero);
2381 return getIntParameter(pname); 2381 return getIntParameter(pname);
2382 case GraphicsContext3D::STENCIL_CLEAR_VALUE: 2382 case GL_STENCIL_CLEAR_VALUE:
2383 return getIntParameter(pname); 2383 return getIntParameter(pname);
2384 case GraphicsContext3D::STENCIL_FAIL: 2384 case GL_STENCIL_FAIL:
2385 return getUnsignedIntParameter(pname); 2385 return getUnsignedIntParameter(pname);
2386 case GraphicsContext3D::STENCIL_FUNC: 2386 case GL_STENCIL_FUNC:
2387 return getUnsignedIntParameter(pname); 2387 return getUnsignedIntParameter(pname);
2388 case GraphicsContext3D::STENCIL_PASS_DEPTH_FAIL: 2388 case GL_STENCIL_PASS_DEPTH_FAIL:
2389 return getUnsignedIntParameter(pname); 2389 return getUnsignedIntParameter(pname);
2390 case GraphicsContext3D::STENCIL_PASS_DEPTH_PASS: 2390 case GL_STENCIL_PASS_DEPTH_PASS:
2391 return getUnsignedIntParameter(pname); 2391 return getUnsignedIntParameter(pname);
2392 case GraphicsContext3D::STENCIL_REF: 2392 case GL_STENCIL_REF:
2393 return getIntParameter(pname); 2393 return getIntParameter(pname);
2394 case GraphicsContext3D::STENCIL_TEST: 2394 case GL_STENCIL_TEST:
2395 return getBooleanParameter(pname); 2395 return getBooleanParameter(pname);
2396 case GraphicsContext3D::STENCIL_VALUE_MASK: 2396 case GL_STENCIL_VALUE_MASK:
2397 return getUnsignedIntParameter(pname); 2397 return getUnsignedIntParameter(pname);
2398 case GraphicsContext3D::STENCIL_WRITEMASK: 2398 case GL_STENCIL_WRITEMASK:
2399 return getUnsignedIntParameter(pname); 2399 return getUnsignedIntParameter(pname);
2400 case GraphicsContext3D::SUBPIXEL_BITS: 2400 case GL_SUBPIXEL_BITS:
2401 return getIntParameter(pname); 2401 return getIntParameter(pname);
2402 case GraphicsContext3D::TEXTURE_BINDING_2D: 2402 case GL_TEXTURE_BINDING_2D:
2403 return WebGLGetInfo(PassRefPtr<WebGLTexture>(m_textureUnits[m_activeText ureUnit].m_texture2DBinding)); 2403 return WebGLGetInfo(PassRefPtr<WebGLTexture>(m_textureUnits[m_activeText ureUnit].m_texture2DBinding));
2404 case GraphicsContext3D::TEXTURE_BINDING_CUBE_MAP: 2404 case GL_TEXTURE_BINDING_CUBE_MAP:
2405 return WebGLGetInfo(PassRefPtr<WebGLTexture>(m_textureUnits[m_activeText ureUnit].m_textureCubeMapBinding)); 2405 return WebGLGetInfo(PassRefPtr<WebGLTexture>(m_textureUnits[m_activeText ureUnit].m_textureCubeMapBinding));
2406 case GraphicsContext3D::UNPACK_ALIGNMENT: 2406 case GL_UNPACK_ALIGNMENT:
2407 return getIntParameter(pname); 2407 return getIntParameter(pname);
2408 case GraphicsContext3D::UNPACK_FLIP_Y_WEBGL: 2408 case GC3D_UNPACK_FLIP_Y_WEBGL:
2409 return WebGLGetInfo(m_unpackFlipY); 2409 return WebGLGetInfo(m_unpackFlipY);
2410 case GraphicsContext3D::UNPACK_PREMULTIPLY_ALPHA_WEBGL: 2410 case GC3D_UNPACK_PREMULTIPLY_ALPHA_WEBGL:
2411 return WebGLGetInfo(m_unpackPremultiplyAlpha); 2411 return WebGLGetInfo(m_unpackPremultiplyAlpha);
2412 case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL: 2412 case GC3D_UNPACK_COLORSPACE_CONVERSION_WEBGL:
2413 return WebGLGetInfo(m_unpackColorspaceConversion); 2413 return WebGLGetInfo(m_unpackColorspaceConversion);
2414 case GraphicsContext3D::VENDOR: 2414 case GL_VENDOR:
2415 return WebGLGetInfo(String("WebKit")); 2415 return WebGLGetInfo(String("WebKit"));
2416 case GraphicsContext3D::VERSION: 2416 case GL_VERSION:
2417 return WebGLGetInfo("WebGL 1.0 (" + m_context->getString(GraphicsContext 3D::VERSION) + ")"); 2417 return WebGLGetInfo("WebGL 1.0 (" + m_context->getString(GL_VERSION) + " )");
2418 case GraphicsContext3D::VIEWPORT: 2418 case GL_VIEWPORT:
2419 return getWebGLIntArrayParameter(pname); 2419 return getWebGLIntArrayParameter(pname);
2420 case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_deri vatives 2420 case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_deri vatives
2421 if (m_oesStandardDerivatives) 2421 if (m_oesStandardDerivatives)
2422 return getUnsignedIntParameter(Extensions3D::FRAGMENT_SHADER_DERIVAT IVE_HINT_OES); 2422 return getUnsignedIntParameter(Extensions3D::FRAGMENT_SHADER_DERIVAT IVE_HINT_OES);
2423 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, OES_standard_derivatives not enabled"); 2423 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, OES_standard_derivatives not enabled");
2424 return WebGLGetInfo(); 2424 return WebGLGetInfo();
2425 case WebGLDebugRendererInfo::UNMASKED_RENDERER_WEBGL: 2425 case WebGLDebugRendererInfo::UNMASKED_RENDERER_WEBGL:
2426 if (m_webglDebugRendererInfo) 2426 if (m_webglDebugRendererInfo)
2427 return WebGLGetInfo(m_context->getString(GraphicsContext3D::RENDERER )); 2427 return WebGLGetInfo(m_context->getString(GL_RENDERER));
2428 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, WEBGL_debug_renderer_info not enabled"); 2428 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, WEBGL_debug_renderer_info not enabled");
2429 return WebGLGetInfo(); 2429 return WebGLGetInfo();
2430 case WebGLDebugRendererInfo::UNMASKED_VENDOR_WEBGL: 2430 case WebGLDebugRendererInfo::UNMASKED_VENDOR_WEBGL:
2431 if (m_webglDebugRendererInfo) 2431 if (m_webglDebugRendererInfo)
2432 return WebGLGetInfo(m_context->getString(GraphicsContext3D::VENDOR)) ; 2432 return WebGLGetInfo(m_context->getString(GL_VENDOR));
2433 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, WEBGL_debug_renderer_info not enabled"); 2433 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, WEBGL_debug_renderer_info not enabled");
2434 return WebGLGetInfo(); 2434 return WebGLGetInfo();
2435 case Extensions3D::VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object 2435 case Extensions3D::VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object
2436 if (m_oesVertexArrayObject) { 2436 if (m_oesVertexArrayObject) {
2437 if (!m_boundVertexArrayObject->isDefaultObject()) 2437 if (!m_boundVertexArrayObject->isDefaultObject())
2438 return WebGLGetInfo(PassRefPtr<WebGLVertexArrayObjectOES>(m_boun dVertexArrayObject)); 2438 return WebGLGetInfo(PassRefPtr<WebGLVertexArrayObjectOES>(m_boun dVertexArrayObject));
2439 return WebGLGetInfo(); 2439 return WebGLGetInfo();
2440 } 2440 }
2441 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, OES_vertex_array_object not enabled"); 2441 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, OES_vertex_array_object not enabled");
2442 return WebGLGetInfo(); 2442 return WebGLGetInfo();
2443 case Extensions3D::MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_ani sotropic 2443 case Extensions3D::MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_ani sotropic
2444 if (m_extTextureFilterAnisotropic) 2444 if (m_extTextureFilterAnisotropic)
2445 return getUnsignedIntParameter(Extensions3D::MAX_TEXTURE_MAX_ANISOTR OPY_EXT); 2445 return getUnsignedIntParameter(Extensions3D::MAX_TEXTURE_MAX_ANISOTR OPY_EXT);
2446 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, EXT_texture_filter_anisotropic not enabled"); 2446 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, EXT_texture_filter_anisotropic not enabled");
2447 return WebGLGetInfo(); 2447 return WebGLGetInfo();
2448 case Extensions3D::MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN 2448 case Extensions3D::MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN
2449 if (m_webglDrawBuffers) 2449 if (m_webglDrawBuffers)
2450 return WebGLGetInfo(maxColorAttachments()); 2450 return WebGLGetInfo(maxColorAttachments());
2451 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, WEBGL_draw_buffers not enabled"); 2451 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, WEBGL_draw_buffers not enabled");
2452 return WebGLGetInfo(); 2452 return WebGLGetInfo();
2453 case Extensions3D::MAX_DRAW_BUFFERS_EXT: 2453 case Extensions3D::MAX_DRAW_BUFFERS_EXT:
2454 if (m_webglDrawBuffers) 2454 if (m_webglDrawBuffers)
2455 return WebGLGetInfo(maxDrawBuffers()); 2455 return WebGLGetInfo(maxDrawBuffers());
2456 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name, WEBGL_draw_buffers not enabled"); 2456 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me, WEBGL_draw_buffers not enabled");
2457 return WebGLGetInfo(); 2457 return WebGLGetInfo();
2458 default: 2458 default:
2459 if (m_webglDrawBuffers 2459 if (m_webglDrawBuffers
2460 && pname >= Extensions3D::DRAW_BUFFER0_EXT 2460 && pname >= Extensions3D::DRAW_BUFFER0_EXT
2461 && pname < static_cast<GC3Denum>(Extensions3D::DRAW_BUFFER0_EXT + ma xDrawBuffers())) { 2461 && pname < static_cast<GC3Denum>(Extensions3D::DRAW_BUFFER0_EXT + ma xDrawBuffers())) {
2462 GC3Dint value = GraphicsContext3D::NONE; 2462 GC3Dint value = GL_NONE;
2463 if (m_framebufferBinding) 2463 if (m_framebufferBinding)
2464 value = m_framebufferBinding->getDrawBuffer(pname); 2464 value = m_framebufferBinding->getDrawBuffer(pname);
2465 else // emulated backbuffer 2465 else // emulated backbuffer
2466 value = m_backDrawBuffer; 2466 value = m_backDrawBuffer;
2467 return WebGLGetInfo(value); 2467 return WebGLGetInfo(value);
2468 } 2468 }
2469 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getParameter", "inva lid parameter name"); 2469 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na me");
2470 return WebGLGetInfo(); 2470 return WebGLGetInfo();
2471 } 2471 }
2472 } 2472 }
2473 2473
2474 WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, G C3Denum pname) 2474 WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, G C3Denum pname)
2475 { 2475 {
2476 if (isContextLost() || !validateWebGLObject("getProgramParameter", program)) 2476 if (isContextLost() || !validateWebGLObject("getProgramParameter", program))
2477 return WebGLGetInfo(); 2477 return WebGLGetInfo();
2478 2478
2479 GC3Dint value = 0; 2479 GC3Dint value = 0;
2480 switch (pname) { 2480 switch (pname) {
2481 case GraphicsContext3D::DELETE_STATUS: 2481 case GL_DELETE_STATUS:
2482 return WebGLGetInfo(program->isDeleted()); 2482 return WebGLGetInfo(program->isDeleted());
2483 case GraphicsContext3D::VALIDATE_STATUS: 2483 case GL_VALIDATE_STATUS:
2484 m_context->getProgramiv(objectOrZero(program), pname, &value); 2484 m_context->getProgramiv(objectOrZero(program), pname, &value);
2485 return WebGLGetInfo(static_cast<bool>(value)); 2485 return WebGLGetInfo(static_cast<bool>(value));
2486 case GraphicsContext3D::LINK_STATUS: 2486 case GL_LINK_STATUS:
2487 return WebGLGetInfo(program->linkStatus()); 2487 return WebGLGetInfo(program->linkStatus());
2488 case GraphicsContext3D::ATTACHED_SHADERS: 2488 case GL_ATTACHED_SHADERS:
2489 case GraphicsContext3D::ACTIVE_ATTRIBUTES: 2489 case GL_ACTIVE_ATTRIBUTES:
2490 case GraphicsContext3D::ACTIVE_UNIFORMS: 2490 case GL_ACTIVE_UNIFORMS:
2491 m_context->getProgramiv(objectOrZero(program), pname, &value); 2491 m_context->getProgramiv(objectOrZero(program), pname, &value);
2492 return WebGLGetInfo(value); 2492 return WebGLGetInfo(value);
2493 default: 2493 default:
2494 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getProgramParameter" , "invalid parameter name"); 2494 synthesizeGLError(GL_INVALID_ENUM, "getProgramParameter", "invalid param eter name");
2495 return WebGLGetInfo(); 2495 return WebGLGetInfo();
2496 } 2496 }
2497 } 2497 }
2498 2498
2499 String WebGLRenderingContext::getProgramInfoLog(WebGLProgram* program) 2499 String WebGLRenderingContext::getProgramInfoLog(WebGLProgram* program)
2500 { 2500 {
2501 if (isContextLost()) 2501 if (isContextLost())
2502 return String(); 2502 return String();
2503 if (!validateWebGLObject("getProgramInfoLog", program)) 2503 if (!validateWebGLObject("getProgramInfoLog", program))
2504 return ""; 2504 return "";
2505 return ensureNotNull(m_context->getProgramInfoLog(objectOrZero(program))); 2505 return ensureNotNull(m_context->getProgramInfoLog(objectOrZero(program)));
2506 } 2506 }
2507 2507
2508 WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(GC3Denum target, GC 3Denum pname) 2508 WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(GC3Denum target, GC 3Denum pname)
2509 { 2509 {
2510 if (isContextLost()) 2510 if (isContextLost())
2511 return WebGLGetInfo(); 2511 return WebGLGetInfo();
2512 if (target != GraphicsContext3D::RENDERBUFFER) { 2512 if (target != GL_RENDERBUFFER) {
2513 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getRenderbufferParam eter", "invalid target"); 2513 synthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter", "invalid target");
2514 return WebGLGetInfo(); 2514 return WebGLGetInfo();
2515 } 2515 }
2516 if (!m_renderbufferBinding || !m_renderbufferBinding->object()) { 2516 if (!m_renderbufferBinding || !m_renderbufferBinding->object()) {
2517 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "getRenderbuffer Parameter", "no renderbuffer bound"); 2517 synthesizeGLError(GL_INVALID_OPERATION, "getRenderbufferParameter", "no renderbuffer bound");
2518 return WebGLGetInfo(); 2518 return WebGLGetInfo();
2519 } 2519 }
2520 2520
2521 GC3Dint value = 0; 2521 GC3Dint value = 0;
2522 switch (pname) { 2522 switch (pname) {
2523 case GraphicsContext3D::RENDERBUFFER_WIDTH: 2523 case GL_RENDERBUFFER_WIDTH:
2524 case GraphicsContext3D::RENDERBUFFER_HEIGHT: 2524 case GL_RENDERBUFFER_HEIGHT:
2525 case GraphicsContext3D::RENDERBUFFER_RED_SIZE: 2525 case GL_RENDERBUFFER_RED_SIZE:
2526 case GraphicsContext3D::RENDERBUFFER_GREEN_SIZE: 2526 case GL_RENDERBUFFER_GREEN_SIZE:
2527 case GraphicsContext3D::RENDERBUFFER_BLUE_SIZE: 2527 case GL_RENDERBUFFER_BLUE_SIZE:
2528 case GraphicsContext3D::RENDERBUFFER_ALPHA_SIZE: 2528 case GL_RENDERBUFFER_ALPHA_SIZE:
2529 case GraphicsContext3D::RENDERBUFFER_DEPTH_SIZE: 2529 case GL_RENDERBUFFER_DEPTH_SIZE:
2530 m_context->getRenderbufferParameteriv(target, pname, &value); 2530 m_context->getRenderbufferParameteriv(target, pname, &value);
2531 return WebGLGetInfo(value); 2531 return WebGLGetInfo(value);
2532 case GraphicsContext3D::RENDERBUFFER_STENCIL_SIZE: 2532 case GL_RENDERBUFFER_STENCIL_SIZE:
2533 if (m_renderbufferBinding->emulatedStencilBuffer()) { 2533 if (m_renderbufferBinding->emulatedStencilBuffer()) {
2534 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi ng->emulatedStencilBuffer())); 2534 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi ng->emulatedStencilBuffer()));
2535 m_context->getRenderbufferParameteriv(target, pname, &value); 2535 m_context->getRenderbufferParameteriv(target, pname, &value);
2536 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi ng.get())); 2536 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi ng.get()));
2537 } else { 2537 } else {
2538 m_context->getRenderbufferParameteriv(target, pname, &value); 2538 m_context->getRenderbufferParameteriv(target, pname, &value);
2539 } 2539 }
2540 return WebGLGetInfo(value); 2540 return WebGLGetInfo(value);
2541 case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT: 2541 case GL_RENDERBUFFER_INTERNAL_FORMAT:
2542 return WebGLGetInfo(m_renderbufferBinding->internalFormat()); 2542 return WebGLGetInfo(m_renderbufferBinding->internalFormat());
2543 default: 2543 default:
2544 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getRenderbufferParam eter", "invalid parameter name"); 2544 synthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter", "invalid parameter name");
2545 return WebGLGetInfo(); 2545 return WebGLGetInfo();
2546 } 2546 }
2547 } 2547 }
2548 2548
2549 WebGLGetInfo WebGLRenderingContext::getShaderParameter(WebGLShader* shader, GC3D enum pname) 2549 WebGLGetInfo WebGLRenderingContext::getShaderParameter(WebGLShader* shader, GC3D enum pname)
2550 { 2550 {
2551 if (isContextLost() || !validateWebGLObject("getShaderParameter", shader)) 2551 if (isContextLost() || !validateWebGLObject("getShaderParameter", shader))
2552 return WebGLGetInfo(); 2552 return WebGLGetInfo();
2553 GC3Dint value = 0; 2553 GC3Dint value = 0;
2554 switch (pname) { 2554 switch (pname) {
2555 case GraphicsContext3D::DELETE_STATUS: 2555 case GL_DELETE_STATUS:
2556 return WebGLGetInfo(shader->isDeleted()); 2556 return WebGLGetInfo(shader->isDeleted());
2557 case GraphicsContext3D::COMPILE_STATUS: 2557 case GL_COMPILE_STATUS:
2558 m_context->getShaderiv(objectOrZero(shader), pname, &value); 2558 m_context->getShaderiv(objectOrZero(shader), pname, &value);
2559 return WebGLGetInfo(static_cast<bool>(value)); 2559 return WebGLGetInfo(static_cast<bool>(value));
2560 case GraphicsContext3D::SHADER_TYPE: 2560 case GL_SHADER_TYPE:
2561 m_context->getShaderiv(objectOrZero(shader), pname, &value); 2561 m_context->getShaderiv(objectOrZero(shader), pname, &value);
2562 return WebGLGetInfo(static_cast<unsigned int>(value)); 2562 return WebGLGetInfo(static_cast<unsigned int>(value));
2563 default: 2563 default:
2564 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getShaderParameter", "invalid parameter name"); 2564 synthesizeGLError(GL_INVALID_ENUM, "getShaderParameter", "invalid parame ter name");
2565 return WebGLGetInfo(); 2565 return WebGLGetInfo();
2566 } 2566 }
2567 } 2567 }
2568 2568
2569 String WebGLRenderingContext::getShaderInfoLog(WebGLShader* shader) 2569 String WebGLRenderingContext::getShaderInfoLog(WebGLShader* shader)
2570 { 2570 {
2571 if (isContextLost()) 2571 if (isContextLost())
2572 return String(); 2572 return String();
2573 if (!validateWebGLObject("getShaderInfoLog", shader)) 2573 if (!validateWebGLObject("getShaderInfoLog", shader))
2574 return ""; 2574 return "";
2575 return ensureNotNull(m_context->getShaderInfoLog(objectOrZero(shader))); 2575 return ensureNotNull(m_context->getShaderInfoLog(objectOrZero(shader)));
2576 } 2576 }
2577 2577
2578 PassRefPtr<WebGLShaderPrecisionFormat> WebGLRenderingContext::getShaderPrecision Format(GC3Denum shaderType, GC3Denum precisionType) 2578 PassRefPtr<WebGLShaderPrecisionFormat> WebGLRenderingContext::getShaderPrecision Format(GC3Denum shaderType, GC3Denum precisionType)
2579 { 2579 {
2580 if (isContextLost()) 2580 if (isContextLost())
2581 return 0; 2581 return 0;
2582 switch (shaderType) { 2582 switch (shaderType) {
2583 case GraphicsContext3D::VERTEX_SHADER: 2583 case GL_VERTEX_SHADER:
2584 case GraphicsContext3D::FRAGMENT_SHADER: 2584 case GL_FRAGMENT_SHADER:
2585 break; 2585 break;
2586 default: 2586 default:
2587 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getShaderPrecisionFo rmat", "invalid shader type"); 2587 synthesizeGLError(GL_INVALID_ENUM, "getShaderPrecisionFormat", "invalid shader type");
2588 return 0; 2588 return 0;
2589 } 2589 }
2590 switch (precisionType) { 2590 switch (precisionType) {
2591 case GraphicsContext3D::LOW_FLOAT: 2591 case GL_LOW_FLOAT:
2592 case GraphicsContext3D::MEDIUM_FLOAT: 2592 case GL_MEDIUM_FLOAT:
2593 case GraphicsContext3D::HIGH_FLOAT: 2593 case GL_HIGH_FLOAT:
2594 case GraphicsContext3D::LOW_INT: 2594 case GL_LOW_INT:
2595 case GraphicsContext3D::MEDIUM_INT: 2595 case GL_MEDIUM_INT:
2596 case GraphicsContext3D::HIGH_INT: 2596 case GL_HIGH_INT:
2597 break; 2597 break;
2598 default: 2598 default:
2599 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getShaderPrecisionFo rmat", "invalid precision type"); 2599 synthesizeGLError(GL_INVALID_ENUM, "getShaderPrecisionFormat", "invalid precision type");
2600 return 0; 2600 return 0;
2601 } 2601 }
2602 2602
2603 GC3Dint range[2] = {0, 0}; 2603 GC3Dint range[2] = {0, 0};
2604 GC3Dint precision = 0; 2604 GC3Dint precision = 0;
2605 m_context->getShaderPrecisionFormat(shaderType, precisionType, range, &preci sion); 2605 m_context->getShaderPrecisionFormat(shaderType, precisionType, range, &preci sion);
2606 return WebGLShaderPrecisionFormat::create(range[0], range[1], precision); 2606 return WebGLShaderPrecisionFormat::create(range[0], range[1], precision);
2607 } 2607 }
2608 2608
2609 String WebGLRenderingContext::getShaderSource(WebGLShader* shader) 2609 String WebGLRenderingContext::getShaderSource(WebGLShader* shader)
(...skipping 28 matching lines...) Expand all
2638 2638
2639 WebGLGetInfo WebGLRenderingContext::getTexParameter(GC3Denum target, GC3Denum pn ame) 2639 WebGLGetInfo WebGLRenderingContext::getTexParameter(GC3Denum target, GC3Denum pn ame)
2640 { 2640 {
2641 if (isContextLost()) 2641 if (isContextLost())
2642 return WebGLGetInfo(); 2642 return WebGLGetInfo();
2643 WebGLTexture* tex = validateTextureBinding("getTexParameter", target, false) ; 2643 WebGLTexture* tex = validateTextureBinding("getTexParameter", target, false) ;
2644 if (!tex) 2644 if (!tex)
2645 return WebGLGetInfo(); 2645 return WebGLGetInfo();
2646 GC3Dint value = 0; 2646 GC3Dint value = 0;
2647 switch (pname) { 2647 switch (pname) {
2648 case GraphicsContext3D::TEXTURE_MAG_FILTER: 2648 case GL_TEXTURE_MAG_FILTER:
2649 case GraphicsContext3D::TEXTURE_MIN_FILTER: 2649 case GL_TEXTURE_MIN_FILTER:
2650 case GraphicsContext3D::TEXTURE_WRAP_S: 2650 case GL_TEXTURE_WRAP_S:
2651 case GraphicsContext3D::TEXTURE_WRAP_T: 2651 case GL_TEXTURE_WRAP_T:
2652 m_context->getTexParameteriv(target, pname, &value); 2652 m_context->getTexParameteriv(target, pname, &value);
2653 return WebGLGetInfo(static_cast<unsigned int>(value)); 2653 return WebGLGetInfo(static_cast<unsigned int>(value));
2654 case Extensions3D::TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotr opic 2654 case Extensions3D::TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotr opic
2655 if (m_extTextureFilterAnisotropic) { 2655 if (m_extTextureFilterAnisotropic) {
2656 m_context->getTexParameteriv(target, pname, &value); 2656 m_context->getTexParameteriv(target, pname, &value);
2657 return WebGLGetInfo(static_cast<unsigned int>(value)); 2657 return WebGLGetInfo(static_cast<unsigned int>(value));
2658 } 2658 }
2659 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getTexParameter", "i nvalid parameter name, EXT_texture_filter_anisotropic not enabled"); 2659 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter name, EXT_texture_filter_anisotropic not enabled");
2660 return WebGLGetInfo(); 2660 return WebGLGetInfo();
2661 default: 2661 default:
2662 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getTexParameter", "i nvalid parameter name"); 2662 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter name");
2663 return WebGLGetInfo(); 2663 return WebGLGetInfo();
2664 } 2664 }
2665 } 2665 }
2666 2666
2667 WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG LUniformLocation* uniformLocation) 2667 WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG LUniformLocation* uniformLocation)
2668 { 2668 {
2669 if (isContextLost() || !validateWebGLObject("getUniform", program)) 2669 if (isContextLost() || !validateWebGLObject("getUniform", program))
2670 return WebGLGetInfo(); 2670 return WebGLGetInfo();
2671 if (!uniformLocation || uniformLocation->program() != program) { 2671 if (!uniformLocation || uniformLocation->program() != program) {
2672 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "getUniform", "n o uniformlocation or not valid for this program"); 2672 synthesizeGLError(GL_INVALID_OPERATION, "getUniform", "no uniformlocatio n or not valid for this program");
2673 return WebGLGetInfo(); 2673 return WebGLGetInfo();
2674 } 2674 }
2675 GC3Dint location = uniformLocation->location(); 2675 GC3Dint location = uniformLocation->location();
2676 2676
2677 // FIXME: make this more efficient using WebGLUniformLocation and caching ty pes in it 2677 // FIXME: make this more efficient using WebGLUniformLocation and caching ty pes in it
2678 GC3Dint activeUniforms = 0; 2678 GC3Dint activeUniforms = 0;
2679 m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ACTIVE_UNI FORMS, &activeUniforms); 2679 m_context->getProgramiv(objectOrZero(program), GL_ACTIVE_UNIFORMS, &activeUn iforms);
2680 for (GC3Dint i = 0; i < activeUniforms; i++) { 2680 for (GC3Dint i = 0; i < activeUniforms; i++) {
2681 ActiveInfo info; 2681 ActiveInfo info;
2682 if (!m_context->getActiveUniform(objectOrZero(program), i, info)) 2682 if (!m_context->getActiveUniform(objectOrZero(program), i, info))
2683 return WebGLGetInfo(); 2683 return WebGLGetInfo();
2684 // Strip "[0]" from the name if it's an array. 2684 // Strip "[0]" from the name if it's an array.
2685 if (info.size > 1 && info.name.endsWith("[0]")) 2685 if (info.size > 1 && info.name.endsWith("[0]"))
2686 info.name = info.name.left(info.name.length() - 3); 2686 info.name = info.name.left(info.name.length() - 3);
2687 // If it's an array, we need to iterate through each element, appending "[index]" to the name. 2687 // If it's an array, we need to iterate through each element, appending "[index]" to the name.
2688 for (GC3Dint index = 0; index < info.size; ++index) { 2688 for (GC3Dint index = 0; index < info.size; ++index) {
2689 String name = info.name; 2689 String name = info.name;
2690 if (info.size > 1 && index >= 1) { 2690 if (info.size > 1 && index >= 1) {
2691 name.append('['); 2691 name.append('[');
2692 name.append(String::number(index)); 2692 name.append(String::number(index));
2693 name.append(']'); 2693 name.append(']');
2694 } 2694 }
2695 // Now need to look this up by name again to find its location 2695 // Now need to look this up by name again to find its location
2696 GC3Dint loc = m_context->getUniformLocation(objectOrZero(program), n ame); 2696 GC3Dint loc = m_context->getUniformLocation(objectOrZero(program), n ame);
2697 if (loc == location) { 2697 if (loc == location) {
2698 // Found it. Use the type in the ActiveInfo to determine the ret urn type. 2698 // Found it. Use the type in the ActiveInfo to determine the ret urn type.
2699 GC3Denum baseType; 2699 GC3Denum baseType;
2700 unsigned int length; 2700 unsigned int length;
2701 switch (info.type) { 2701 switch (info.type) {
2702 case GraphicsContext3D::BOOL: 2702 case GL_BOOL:
2703 baseType = GraphicsContext3D::BOOL; 2703 baseType = GL_BOOL;
2704 length = 1; 2704 length = 1;
2705 break; 2705 break;
2706 case GraphicsContext3D::BOOL_VEC2: 2706 case GL_BOOL_VEC2:
2707 baseType = GraphicsContext3D::BOOL; 2707 baseType = GL_BOOL;
2708 length = 2; 2708 length = 2;
2709 break; 2709 break;
2710 case GraphicsContext3D::BOOL_VEC3: 2710 case GL_BOOL_VEC3:
2711 baseType = GraphicsContext3D::BOOL; 2711 baseType = GL_BOOL;
2712 length = 3; 2712 length = 3;
2713 break; 2713 break;
2714 case GraphicsContext3D::BOOL_VEC4: 2714 case GL_BOOL_VEC4:
2715 baseType = GraphicsContext3D::BOOL; 2715 baseType = GL_BOOL;
2716 length = 4; 2716 length = 4;
2717 break; 2717 break;
2718 case GraphicsContext3D::INT: 2718 case GL_INT:
2719 baseType = GraphicsContext3D::INT; 2719 baseType = GL_INT;
2720 length = 1; 2720 length = 1;
2721 break; 2721 break;
2722 case GraphicsContext3D::INT_VEC2: 2722 case GL_INT_VEC2:
2723 baseType = GraphicsContext3D::INT; 2723 baseType = GL_INT;
2724 length = 2; 2724 length = 2;
2725 break; 2725 break;
2726 case GraphicsContext3D::INT_VEC3: 2726 case GL_INT_VEC3:
2727 baseType = GraphicsContext3D::INT; 2727 baseType = GL_INT;
2728 length = 3; 2728 length = 3;
2729 break; 2729 break;
2730 case GraphicsContext3D::INT_VEC4: 2730 case GL_INT_VEC4:
2731 baseType = GraphicsContext3D::INT; 2731 baseType = GL_INT;
2732 length = 4; 2732 length = 4;
2733 break; 2733 break;
2734 case GraphicsContext3D::FLOAT: 2734 case GL_FLOAT:
2735 baseType = GraphicsContext3D::FLOAT; 2735 baseType = GL_FLOAT;
2736 length = 1; 2736 length = 1;
2737 break; 2737 break;
2738 case GraphicsContext3D::FLOAT_VEC2: 2738 case GL_FLOAT_VEC2:
2739 baseType = GraphicsContext3D::FLOAT; 2739 baseType = GL_FLOAT;
2740 length = 2; 2740 length = 2;
2741 break; 2741 break;
2742 case GraphicsContext3D::FLOAT_VEC3: 2742 case GL_FLOAT_VEC3:
2743 baseType = GraphicsContext3D::FLOAT; 2743 baseType = GL_FLOAT;
2744 length = 3; 2744 length = 3;
2745 break; 2745 break;
2746 case GraphicsContext3D::FLOAT_VEC4: 2746 case GL_FLOAT_VEC4:
2747 baseType = GraphicsContext3D::FLOAT; 2747 baseType = GL_FLOAT;
2748 length = 4; 2748 length = 4;
2749 break; 2749 break;
2750 case GraphicsContext3D::FLOAT_MAT2: 2750 case GL_FLOAT_MAT2:
2751 baseType = GraphicsContext3D::FLOAT; 2751 baseType = GL_FLOAT;
2752 length = 4; 2752 length = 4;
2753 break; 2753 break;
2754 case GraphicsContext3D::FLOAT_MAT3: 2754 case GL_FLOAT_MAT3:
2755 baseType = GraphicsContext3D::FLOAT; 2755 baseType = GL_FLOAT;
2756 length = 9; 2756 length = 9;
2757 break; 2757 break;
2758 case GraphicsContext3D::FLOAT_MAT4: 2758 case GL_FLOAT_MAT4:
2759 baseType = GraphicsContext3D::FLOAT; 2759 baseType = GL_FLOAT;
2760 length = 16; 2760 length = 16;
2761 break; 2761 break;
2762 case GraphicsContext3D::SAMPLER_2D: 2762 case GL_SAMPLER_2D:
2763 case GraphicsContext3D::SAMPLER_CUBE: 2763 case GL_SAMPLER_CUBE:
2764 baseType = GraphicsContext3D::INT; 2764 baseType = GL_INT;
2765 length = 1; 2765 length = 1;
2766 break; 2766 break;
2767 default: 2767 default:
2768 // Can't handle this type 2768 // Can't handle this type
2769 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "getUnif orm", "unhandled type"); 2769 synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unhandled type");
2770 return WebGLGetInfo(); 2770 return WebGLGetInfo();
2771 } 2771 }
2772 switch (baseType) { 2772 switch (baseType) {
2773 case GraphicsContext3D::FLOAT: { 2773 case GL_FLOAT: {
2774 GC3Dfloat value[16] = {0}; 2774 GC3Dfloat value[16] = {0};
2775 m_context->getUniformfv(objectOrZero(program), location, val ue); 2775 m_context->getUniformfv(objectOrZero(program), location, val ue);
2776 if (length == 1) 2776 if (length == 1)
2777 return WebGLGetInfo(value[0]); 2777 return WebGLGetInfo(value[0]);
2778 return WebGLGetInfo(Float32Array::create(value, length)); 2778 return WebGLGetInfo(Float32Array::create(value, length));
2779 } 2779 }
2780 case GraphicsContext3D::INT: { 2780 case GL_INT: {
2781 GC3Dint value[4] = {0}; 2781 GC3Dint value[4] = {0};
2782 m_context->getUniformiv(objectOrZero(program), location, val ue); 2782 m_context->getUniformiv(objectOrZero(program), location, val ue);
2783 if (length == 1) 2783 if (length == 1)
2784 return WebGLGetInfo(value[0]); 2784 return WebGLGetInfo(value[0]);
2785 return WebGLGetInfo(Int32Array::create(value, length)); 2785 return WebGLGetInfo(Int32Array::create(value, length));
2786 } 2786 }
2787 case GraphicsContext3D::BOOL: { 2787 case GL_BOOL: {
2788 GC3Dint value[4] = {0}; 2788 GC3Dint value[4] = {0};
2789 m_context->getUniformiv(objectOrZero(program), location, val ue); 2789 m_context->getUniformiv(objectOrZero(program), location, val ue);
2790 if (length > 1) { 2790 if (length > 1) {
2791 bool boolValue[16] = {0}; 2791 bool boolValue[16] = {0};
2792 for (unsigned j = 0; j < length; j++) 2792 for (unsigned j = 0; j < length; j++)
2793 boolValue[j] = static_cast<bool>(value[j]); 2793 boolValue[j] = static_cast<bool>(value[j]);
2794 return WebGLGetInfo(boolValue, length); 2794 return WebGLGetInfo(boolValue, length);
2795 } 2795 }
2796 return WebGLGetInfo(static_cast<bool>(value[0])); 2796 return WebGLGetInfo(static_cast<bool>(value[0]));
2797 } 2797 }
2798 default: 2798 default:
2799 notImplemented(); 2799 notImplemented();
2800 } 2800 }
2801 } 2801 }
2802 } 2802 }
2803 } 2803 }
2804 // If we get here, something went wrong in our unfortunately complex logic a bove 2804 // If we get here, something went wrong in our unfortunately complex logic a bove
2805 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "getUniform", "unknown e rror"); 2805 synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unknown error");
2806 return WebGLGetInfo(); 2806 return WebGLGetInfo();
2807 } 2807 }
2808 2808
2809 PassRefPtr<WebGLUniformLocation> WebGLRenderingContext::getUniformLocation(WebGL Program* program, const String& name) 2809 PassRefPtr<WebGLUniformLocation> WebGLRenderingContext::getUniformLocation(WebGL Program* program, const String& name)
2810 { 2810 {
2811 if (isContextLost() || !validateWebGLObject("getUniformLocation", program)) 2811 if (isContextLost() || !validateWebGLObject("getUniformLocation", program))
2812 return 0; 2812 return 0;
2813 if (!validateLocationLength("getUniformLocation", name)) 2813 if (!validateLocationLength("getUniformLocation", name))
2814 return 0; 2814 return 0;
2815 if (!validateString("getUniformLocation", name)) 2815 if (!validateString("getUniformLocation", name))
2816 return 0; 2816 return 0;
2817 if (isPrefixReserved(name)) 2817 if (isPrefixReserved(name))
2818 return 0; 2818 return 0;
2819 if (!program->linkStatus()) { 2819 if (!program->linkStatus()) {
2820 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "getUniformLocat ion", "program not linked"); 2820 synthesizeGLError(GL_INVALID_OPERATION, "getUniformLocation", "program n ot linked");
2821 return 0; 2821 return 0;
2822 } 2822 }
2823 GC3Dint uniformLocation = m_context->getUniformLocation(objectOrZero(program ), name); 2823 GC3Dint uniformLocation = m_context->getUniformLocation(objectOrZero(program ), name);
2824 if (uniformLocation == -1) 2824 if (uniformLocation == -1)
2825 return 0; 2825 return 0;
2826 return WebGLUniformLocation::create(program, uniformLocation); 2826 return WebGLUniformLocation::create(program, uniformLocation);
2827 } 2827 }
2828 2828
2829 WebGLGetInfo WebGLRenderingContext::getVertexAttrib(GC3Duint index, GC3Denum pna me) 2829 WebGLGetInfo WebGLRenderingContext::getVertexAttrib(GC3Duint index, GC3Denum pna me)
2830 { 2830 {
2831 if (isContextLost()) 2831 if (isContextLost())
2832 return WebGLGetInfo(); 2832 return WebGLGetInfo();
2833 if (index >= m_maxVertexAttribs) { 2833 if (index >= m_maxVertexAttribs) {
2834 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "getVertexAttrib", " index out of range"); 2834 synthesizeGLError(GL_INVALID_VALUE, "getVertexAttrib", "index out of ran ge");
2835 return WebGLGetInfo(); 2835 return WebGLGetInfo();
2836 } 2836 }
2837 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArr ayObject->getVertexAttribState(index); 2837 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArr ayObject->getVertexAttribState(index);
2838 2838
2839 if (m_angleInstancedArrays && pname == Extensions3D::VERTEX_ATTRIB_ARRAY_DIV ISOR_ANGLE) 2839 if (m_angleInstancedArrays && pname == Extensions3D::VERTEX_ATTRIB_ARRAY_DIV ISOR_ANGLE)
2840 return WebGLGetInfo(state.divisor); 2840 return WebGLGetInfo(state.divisor);
2841 2841
2842 switch (pname) { 2842 switch (pname) {
2843 case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 2843 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
2844 if (!state.bufferBinding || !state.bufferBinding->object()) 2844 if (!state.bufferBinding || !state.bufferBinding->object())
2845 return WebGLGetInfo(); 2845 return WebGLGetInfo();
2846 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(state.bufferBinding)); 2846 return WebGLGetInfo(PassRefPtr<WebGLBuffer>(state.bufferBinding));
2847 case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_ENABLED: 2847 case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
2848 return WebGLGetInfo(state.enabled); 2848 return WebGLGetInfo(state.enabled);
2849 case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_NORMALIZED: 2849 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
2850 return WebGLGetInfo(state.normalized); 2850 return WebGLGetInfo(state.normalized);
2851 case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_SIZE: 2851 case GL_VERTEX_ATTRIB_ARRAY_SIZE:
2852 return WebGLGetInfo(state.size); 2852 return WebGLGetInfo(state.size);
2853 case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_STRIDE: 2853 case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
2854 return WebGLGetInfo(state.originalStride); 2854 return WebGLGetInfo(state.originalStride);
2855 case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_TYPE: 2855 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
2856 return WebGLGetInfo(state.type); 2856 return WebGLGetInfo(state.type);
2857 case GraphicsContext3D::CURRENT_VERTEX_ATTRIB: 2857 case GL_CURRENT_VERTEX_ATTRIB:
2858 return WebGLGetInfo(Float32Array::create(m_vertexAttribValue[index].valu e, 4)); 2858 return WebGLGetInfo(Float32Array::create(m_vertexAttribValue[index].valu e, 4));
2859 default: 2859 default:
2860 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getVertexAttrib", "i nvalid parameter name"); 2860 synthesizeGLError(GL_INVALID_ENUM, "getVertexAttrib", "invalid parameter name");
2861 return WebGLGetInfo(); 2861 return WebGLGetInfo();
2862 } 2862 }
2863 } 2863 }
2864 2864
2865 long long WebGLRenderingContext::getVertexAttribOffset(GC3Duint index, GC3Denum pname) 2865 long long WebGLRenderingContext::getVertexAttribOffset(GC3Duint index, GC3Denum pname)
2866 { 2866 {
2867 if (isContextLost()) 2867 if (isContextLost())
2868 return 0; 2868 return 0;
2869 if (pname != GraphicsContext3D::VERTEX_ATTRIB_ARRAY_POINTER) { 2869 if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER) {
2870 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getVertexAttribOffse t", "invalid parameter name"); 2870 synthesizeGLError(GL_INVALID_ENUM, "getVertexAttribOffset", "invalid par ameter name");
2871 return 0; 2871 return 0;
2872 } 2872 }
2873 GC3Dsizeiptr result = m_context->getVertexAttribOffset(index, pname); 2873 GC3Dsizeiptr result = m_context->getVertexAttribOffset(index, pname);
2874 return static_cast<long long>(result); 2874 return static_cast<long long>(result);
2875 } 2875 }
2876 2876
2877 void WebGLRenderingContext::hint(GC3Denum target, GC3Denum mode) 2877 void WebGLRenderingContext::hint(GC3Denum target, GC3Denum mode)
2878 { 2878 {
2879 if (isContextLost()) 2879 if (isContextLost())
2880 return; 2880 return;
2881 bool isValid = false; 2881 bool isValid = false;
2882 switch (target) { 2882 switch (target) {
2883 case GraphicsContext3D::GENERATE_MIPMAP_HINT: 2883 case GL_GENERATE_MIPMAP_HINT:
2884 isValid = true; 2884 isValid = true;
2885 break; 2885 break;
2886 case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_deri vatives 2886 case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_deri vatives
2887 if (m_oesStandardDerivatives) 2887 if (m_oesStandardDerivatives)
2888 isValid = true; 2888 isValid = true;
2889 break; 2889 break;
2890 } 2890 }
2891 if (!isValid) { 2891 if (!isValid) {
2892 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "hint", "invalid targ et"); 2892 synthesizeGLError(GL_INVALID_ENUM, "hint", "invalid target");
2893 return; 2893 return;
2894 } 2894 }
2895 m_context->hint(target, mode); 2895 m_context->hint(target, mode);
2896 } 2896 }
2897 2897
2898 GC3Dboolean WebGLRenderingContext::isBuffer(WebGLBuffer* buffer) 2898 GC3Dboolean WebGLRenderingContext::isBuffer(WebGLBuffer* buffer)
2899 { 2899 {
2900 if (!buffer || isContextLost()) 2900 if (!buffer || isContextLost())
2901 return 0; 2901 return 0;
2902 2902
2903 if (!buffer->hasEverBeenBound()) 2903 if (!buffer->hasEverBeenBound())
2904 return 0; 2904 return 0;
2905 2905
2906 return m_context->isBuffer(buffer->object()); 2906 return m_context->isBuffer(buffer->object());
2907 } 2907 }
2908 2908
2909 bool WebGLRenderingContext::isContextLost() 2909 bool WebGLRenderingContext::isContextLost()
2910 { 2910 {
2911 return m_contextLost; 2911 return m_contextLost;
2912 } 2912 }
2913 2913
2914 GC3Dboolean WebGLRenderingContext::isEnabled(GC3Denum cap) 2914 GC3Dboolean WebGLRenderingContext::isEnabled(GC3Denum cap)
2915 { 2915 {
2916 if (isContextLost() || !validateCapability("isEnabled", cap)) 2916 if (isContextLost() || !validateCapability("isEnabled", cap))
2917 return 0; 2917 return 0;
2918 if (cap == GraphicsContext3D::STENCIL_TEST) 2918 if (cap == GL_STENCIL_TEST)
2919 return m_stencilEnabled; 2919 return m_stencilEnabled;
2920 return m_context->isEnabled(cap); 2920 return m_context->isEnabled(cap);
2921 } 2921 }
2922 2922
2923 GC3Dboolean WebGLRenderingContext::isFramebuffer(WebGLFramebuffer* framebuffer) 2923 GC3Dboolean WebGLRenderingContext::isFramebuffer(WebGLFramebuffer* framebuffer)
2924 { 2924 {
2925 if (!framebuffer || isContextLost()) 2925 if (!framebuffer || isContextLost())
2926 return 0; 2926 return 0;
2927 2927
2928 if (!framebuffer->hasEverBeenBound()) 2928 if (!framebuffer->hasEverBeenBound())
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2983 2983
2984 m_context->linkProgram(objectOrZero(program)); 2984 m_context->linkProgram(objectOrZero(program));
2985 program->increaseLinkCount(); 2985 program->increaseLinkCount();
2986 } 2986 }
2987 2987
2988 void WebGLRenderingContext::pixelStorei(GC3Denum pname, GC3Dint param) 2988 void WebGLRenderingContext::pixelStorei(GC3Denum pname, GC3Dint param)
2989 { 2989 {
2990 if (isContextLost()) 2990 if (isContextLost())
2991 return; 2991 return;
2992 switch (pname) { 2992 switch (pname) {
2993 case GraphicsContext3D::UNPACK_FLIP_Y_WEBGL: 2993 case GC3D_UNPACK_FLIP_Y_WEBGL:
2994 m_unpackFlipY = param; 2994 m_unpackFlipY = param;
2995 break; 2995 break;
2996 case GraphicsContext3D::UNPACK_PREMULTIPLY_ALPHA_WEBGL: 2996 case GC3D_UNPACK_PREMULTIPLY_ALPHA_WEBGL:
2997 m_unpackPremultiplyAlpha = param; 2997 m_unpackPremultiplyAlpha = param;
2998 break; 2998 break;
2999 case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL: 2999 case GC3D_UNPACK_COLORSPACE_CONVERSION_WEBGL:
3000 if (param == GraphicsContext3D::BROWSER_DEFAULT_WEBGL || param == Graphi csContext3D::NONE) 3000 if (static_cast<GC3Denum>(param) == GC3D_BROWSER_DEFAULT_WEBGL || param == GL_NONE)
3001 m_unpackColorspaceConversion = static_cast<GC3Denum>(param); 3001 m_unpackColorspaceConversion = static_cast<GC3Denum>(param);
3002 else { 3002 else {
3003 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "pixelStorei", " invalid parameter for UNPACK_COLORSPACE_CONVERSION_WEBGL"); 3003 synthesizeGLError(GL_INVALID_VALUE, "pixelStorei", "invalid paramete r for UNPACK_COLORSPACE_CONVERSION_WEBGL");
3004 return; 3004 return;
3005 } 3005 }
3006 break; 3006 break;
3007 case GraphicsContext3D::PACK_ALIGNMENT: 3007 case GL_PACK_ALIGNMENT:
3008 case GraphicsContext3D::UNPACK_ALIGNMENT: 3008 case GL_UNPACK_ALIGNMENT:
3009 if (param == 1 || param == 2 || param == 4 || param == 8) { 3009 if (param == 1 || param == 2 || param == 4 || param == 8) {
3010 if (pname == GraphicsContext3D::PACK_ALIGNMENT) 3010 if (pname == GL_PACK_ALIGNMENT)
3011 m_packAlignment = param; 3011 m_packAlignment = param;
3012 else // GraphicsContext3D::UNPACK_ALIGNMENT: 3012 else // GL_UNPACK_ALIGNMENT:
3013 m_unpackAlignment = param; 3013 m_unpackAlignment = param;
3014 m_context->pixelStorei(pname, param); 3014 m_context->pixelStorei(pname, param);
3015 } else { 3015 } else {
3016 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "pixelStorei", " invalid parameter for alignment"); 3016 synthesizeGLError(GL_INVALID_VALUE, "pixelStorei", "invalid paramete r for alignment");
3017 return; 3017 return;
3018 } 3018 }
3019 break; 3019 break;
3020 default: 3020 default:
3021 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "pixelStorei", "inval id parameter name"); 3021 synthesizeGLError(GL_INVALID_ENUM, "pixelStorei", "invalid parameter nam e");
3022 return; 3022 return;
3023 } 3023 }
3024 } 3024 }
3025 3025
3026 void WebGLRenderingContext::polygonOffset(GC3Dfloat factor, GC3Dfloat units) 3026 void WebGLRenderingContext::polygonOffset(GC3Dfloat factor, GC3Dfloat units)
3027 { 3027 {
3028 if (isContextLost()) 3028 if (isContextLost())
3029 return; 3029 return;
3030 m_context->polygonOffset(factor, units); 3030 m_context->polygonOffset(factor, units);
3031 } 3031 }
3032 3032
3033 void WebGLRenderingContext::readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC 3Dsizei height, GC3Denum format, GC3Denum type, ArrayBufferView* pixels) 3033 void WebGLRenderingContext::readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC 3Dsizei height, GC3Denum format, GC3Denum type, ArrayBufferView* pixels)
3034 { 3034 {
3035 if (isContextLost()) 3035 if (isContextLost())
3036 return; 3036 return;
3037 // Due to WebGL's same-origin restrictions, it is not possible to 3037 // Due to WebGL's same-origin restrictions, it is not possible to
3038 // taint the origin using the WebGL API. 3038 // taint the origin using the WebGL API.
3039 ASSERT(canvas()->originClean()); 3039 ASSERT(canvas()->originClean());
3040 // Validate input parameters. 3040 // Validate input parameters.
3041 if (!pixels) { 3041 if (!pixels) {
3042 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "readPixels", "no de stination ArrayBufferView"); 3042 synthesizeGLError(GL_INVALID_VALUE, "readPixels", "no destination ArrayB ufferView");
3043 return; 3043 return;
3044 } 3044 }
3045 switch (format) { 3045 switch (format) {
3046 case GraphicsContext3D::ALPHA: 3046 case GL_ALPHA:
3047 case GraphicsContext3D::RGB: 3047 case GL_RGB:
3048 case GraphicsContext3D::RGBA: 3048 case GL_RGBA:
3049 break; 3049 break;
3050 default: 3050 default:
3051 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "readPixels", "invali d format"); 3051 synthesizeGLError(GL_INVALID_ENUM, "readPixels", "invalid format");
3052 return; 3052 return;
3053 } 3053 }
3054 switch (type) { 3054 switch (type) {
3055 case GraphicsContext3D::UNSIGNED_BYTE: 3055 case GL_UNSIGNED_BYTE:
3056 case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: 3056 case GL_UNSIGNED_SHORT_5_6_5:
3057 case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: 3057 case GL_UNSIGNED_SHORT_4_4_4_4:
3058 case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: 3058 case GL_UNSIGNED_SHORT_5_5_5_1:
3059 break; 3059 break;
3060 default: 3060 default:
3061 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "readPixels", "invali d type"); 3061 synthesizeGLError(GL_INVALID_ENUM, "readPixels", "invalid type");
3062 return; 3062 return;
3063 } 3063 }
3064 if (format != GraphicsContext3D::RGBA || type != GraphicsContext3D::UNSIGNED _BYTE) { 3064 if (format != GL_RGBA || type != GL_UNSIGNED_BYTE) {
3065 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "readPixels", "f ormat not RGBA or type not UNSIGNED_BYTE"); 3065 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "format not RGBA o r type not UNSIGNED_BYTE");
3066 return; 3066 return;
3067 } 3067 }
3068 // Validate array type against pixel type. 3068 // Validate array type against pixel type.
3069 if (pixels->getType() != ArrayBufferView::TypeUint8) { 3069 if (pixels->getType() != ArrayBufferView::TypeUint8) {
3070 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "readPixels", "A rrayBufferView not Uint8Array"); 3070 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "ArrayBufferView n ot Uint8Array");
3071 return; 3071 return;
3072 } 3072 }
3073 const char* reason = "framebuffer incomplete"; 3073 const char* reason = "framebuffer incomplete";
3074 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) { 3074 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) {
3075 synthesizeGLError(GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION, "rea dPixels", reason); 3075 synthesizeGLError(GL_INVALID_FRAMEBUFFER_OPERATION, "readPixels", reason );
3076 return; 3076 return;
3077 } 3077 }
3078 // Calculate array size, taking into consideration of PACK_ALIGNMENT. 3078 // Calculate array size, taking into consideration of PACK_ALIGNMENT.
3079 unsigned int totalBytesRequired = 0; 3079 unsigned int totalBytesRequired = 0;
3080 unsigned int padding = 0; 3080 unsigned int padding = 0;
3081 GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, hei ght, m_packAlignment, &totalBytesRequired, &padding); 3081 GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, hei ght, m_packAlignment, &totalBytesRequired, &padding);
3082 if (error != GraphicsContext3D::NO_ERROR) { 3082 if (error != GL_NO_ERROR) {
3083 synthesizeGLError(error, "readPixels", "invalid dimensions"); 3083 synthesizeGLError(error, "readPixels", "invalid dimensions");
3084 return; 3084 return;
3085 } 3085 }
3086 if (pixels->byteLength() < totalBytesRequired) { 3086 if (pixels->byteLength() < totalBytesRequired) {
3087 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "readPixels", "A rrayBufferView not large enough for dimensions"); 3087 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "ArrayBufferView n ot large enough for dimensions");
3088 return; 3088 return;
3089 } 3089 }
3090 3090
3091 clearIfComposited(); 3091 clearIfComposited();
3092 void* data = pixels->baseAddress(); 3092 void* data = pixels->baseAddress();
3093 3093
3094 { 3094 {
3095 ScopedDrawingBufferBinder binder(m_drawingBuffer.get(), m_framebufferBin ding.get()); 3095 ScopedDrawingBufferBinder binder(m_drawingBuffer.get(), m_framebufferBin ding.get());
3096 m_context->readPixels(x, y, width, height, format, type, data); 3096 m_context->readPixels(x, y, width, height, format, type, data);
3097 } 3097 }
(...skipping 11 matching lines...) Expand all
3109 pixels += padding; 3109 pixels += padding;
3110 } 3110 }
3111 } 3111 }
3112 #endif 3112 #endif
3113 } 3113 }
3114 3114
3115 void WebGLRenderingContext::renderbufferStorage(GC3Denum target, GC3Denum intern alformat, GC3Dsizei width, GC3Dsizei height) 3115 void WebGLRenderingContext::renderbufferStorage(GC3Denum target, GC3Denum intern alformat, GC3Dsizei width, GC3Dsizei height)
3116 { 3116 {
3117 if (isContextLost()) 3117 if (isContextLost())
3118 return; 3118 return;
3119 if (target != GraphicsContext3D::RENDERBUFFER) { 3119 if (target != GL_RENDERBUFFER) {
3120 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "renderbufferStorage" , "invalid target"); 3120 synthesizeGLError(GL_INVALID_ENUM, "renderbufferStorage", "invalid targe t");
3121 return; 3121 return;
3122 } 3122 }
3123 if (!m_renderbufferBinding || !m_renderbufferBinding->object()) { 3123 if (!m_renderbufferBinding || !m_renderbufferBinding->object()) {
3124 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "renderbufferSto rage", "no bound renderbuffer"); 3124 synthesizeGLError(GL_INVALID_OPERATION, "renderbufferStorage", "no bound renderbuffer");
3125 return; 3125 return;
3126 } 3126 }
3127 if (!validateSize("renderbufferStorage", width, height)) 3127 if (!validateSize("renderbufferStorage", width, height))
3128 return; 3128 return;
3129 switch (internalformat) { 3129 switch (internalformat) {
3130 case GraphicsContext3D::DEPTH_COMPONENT16: 3130 case GL_DEPTH_COMPONENT16:
3131 case GraphicsContext3D::RGBA4: 3131 case GL_RGBA4:
3132 case GraphicsContext3D::RGB5_A1: 3132 case GL_RGB5_A1:
3133 case GraphicsContext3D::RGB565: 3133 case GL_RGB565:
3134 case GraphicsContext3D::STENCIL_INDEX8: 3134 case GL_STENCIL_INDEX8:
3135 m_context->renderbufferStorage(target, internalformat, width, height); 3135 m_context->renderbufferStorage(target, internalformat, width, height);
3136 m_renderbufferBinding->setInternalFormat(internalformat); 3136 m_renderbufferBinding->setInternalFormat(internalformat);
3137 m_renderbufferBinding->setSize(width, height); 3137 m_renderbufferBinding->setSize(width, height);
3138 m_renderbufferBinding->deleteEmulatedStencilBuffer(m_context.get()); 3138 m_renderbufferBinding->deleteEmulatedStencilBuffer(m_context.get());
3139 break; 3139 break;
3140 case GraphicsContext3D::DEPTH_STENCIL: 3140 case GL_DEPTH_STENCIL_OES:
3141 if (isDepthStencilSupported()) { 3141 if (isDepthStencilSupported()) {
3142 m_context->renderbufferStorage(target, Extensions3D::DEPTH24_STENCIL 8, width, height); 3142 m_context->renderbufferStorage(target, Extensions3D::DEPTH24_STENCIL 8, width, height);
3143 } else { 3143 } else {
3144 WebGLRenderbuffer* emulatedStencilBuffer = ensureEmulatedStencilBuff er(target, m_renderbufferBinding.get()); 3144 WebGLRenderbuffer* emulatedStencilBuffer = ensureEmulatedStencilBuff er(target, m_renderbufferBinding.get());
3145 if (!emulatedStencilBuffer) { 3145 if (!emulatedStencilBuffer) {
3146 synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY, "renderbuffe rStorage", "out of memory"); 3146 synthesizeGLError(GL_OUT_OF_MEMORY, "renderbufferStorage", "out of memory");
3147 return; 3147 return;
3148 } 3148 }
3149 m_context->renderbufferStorage(target, GraphicsContext3D::DEPTH_COMP ONENT16, width, height); 3149 m_context->renderbufferStorage(target, GL_DEPTH_COMPONENT16, width, height);
3150 m_context->bindRenderbuffer(target, objectOrZero(emulatedStencilBuff er)); 3150 m_context->bindRenderbuffer(target, objectOrZero(emulatedStencilBuff er));
3151 m_context->renderbufferStorage(target, GraphicsContext3D::STENCIL_IN DEX8, width, height); 3151 m_context->renderbufferStorage(target, GL_STENCIL_INDEX8, width, hei ght);
3152 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi ng.get())); 3152 m_context->bindRenderbuffer(target, objectOrZero(m_renderbufferBindi ng.get()));
3153 emulatedStencilBuffer->setSize(width, height); 3153 emulatedStencilBuffer->setSize(width, height);
3154 emulatedStencilBuffer->setInternalFormat(GraphicsContext3D::STENCIL_ INDEX8); 3154 emulatedStencilBuffer->setInternalFormat(GL_STENCIL_INDEX8);
3155 } 3155 }
3156 m_renderbufferBinding->setSize(width, height); 3156 m_renderbufferBinding->setSize(width, height);
3157 m_renderbufferBinding->setInternalFormat(internalformat); 3157 m_renderbufferBinding->setInternalFormat(internalformat);
3158 break; 3158 break;
3159 default: 3159 default:
3160 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "renderbufferStorage" , "invalid internalformat"); 3160 synthesizeGLError(GL_INVALID_ENUM, "renderbufferStorage", "invalid inter nalformat");
3161 return; 3161 return;
3162 } 3162 }
3163 applyStencilTest(); 3163 applyStencilTest();
3164 } 3164 }
3165 3165
3166 void WebGLRenderingContext::sampleCoverage(GC3Dfloat value, GC3Dboolean invert) 3166 void WebGLRenderingContext::sampleCoverage(GC3Dfloat value, GC3Dboolean invert)
3167 { 3167 {
3168 if (isContextLost()) 3168 if (isContextLost())
3169 return; 3169 return;
3170 m_context->sampleCoverage(value, invert); 3170 m_context->sampleCoverage(value, invert);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3203 m_context->stencilFunc(func, ref, mask); 3203 m_context->stencilFunc(func, ref, mask);
3204 } 3204 }
3205 3205
3206 void WebGLRenderingContext::stencilFuncSeparate(GC3Denum face, GC3Denum func, GC 3Dint ref, GC3Duint mask) 3206 void WebGLRenderingContext::stencilFuncSeparate(GC3Denum face, GC3Denum func, GC 3Dint ref, GC3Duint mask)
3207 { 3207 {
3208 if (isContextLost()) 3208 if (isContextLost())
3209 return; 3209 return;
3210 if (!validateStencilOrDepthFunc("stencilFuncSeparate", func)) 3210 if (!validateStencilOrDepthFunc("stencilFuncSeparate", func))
3211 return; 3211 return;
3212 switch (face) { 3212 switch (face) {
3213 case GraphicsContext3D::FRONT_AND_BACK: 3213 case GL_FRONT_AND_BACK:
3214 m_stencilFuncRef = ref; 3214 m_stencilFuncRef = ref;
3215 m_stencilFuncRefBack = ref; 3215 m_stencilFuncRefBack = ref;
3216 m_stencilFuncMask = mask; 3216 m_stencilFuncMask = mask;
3217 m_stencilFuncMaskBack = mask; 3217 m_stencilFuncMaskBack = mask;
3218 break; 3218 break;
3219 case GraphicsContext3D::FRONT: 3219 case GL_FRONT:
3220 m_stencilFuncRef = ref; 3220 m_stencilFuncRef = ref;
3221 m_stencilFuncMask = mask; 3221 m_stencilFuncMask = mask;
3222 break; 3222 break;
3223 case GraphicsContext3D::BACK: 3223 case GL_BACK:
3224 m_stencilFuncRefBack = ref; 3224 m_stencilFuncRefBack = ref;
3225 m_stencilFuncMaskBack = mask; 3225 m_stencilFuncMaskBack = mask;
3226 break; 3226 break;
3227 default: 3227 default:
3228 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "stencilFuncSeparate" , "invalid face"); 3228 synthesizeGLError(GL_INVALID_ENUM, "stencilFuncSeparate", "invalid face" );
3229 return; 3229 return;
3230 } 3230 }
3231 m_context->stencilFuncSeparate(face, func, ref, mask); 3231 m_context->stencilFuncSeparate(face, func, ref, mask);
3232 } 3232 }
3233 3233
3234 void WebGLRenderingContext::stencilMask(GC3Duint mask) 3234 void WebGLRenderingContext::stencilMask(GC3Duint mask)
3235 { 3235 {
3236 if (isContextLost()) 3236 if (isContextLost())
3237 return; 3237 return;
3238 m_stencilMask = mask; 3238 m_stencilMask = mask;
3239 m_stencilMaskBack = mask; 3239 m_stencilMaskBack = mask;
3240 m_context->stencilMask(mask); 3240 m_context->stencilMask(mask);
3241 } 3241 }
3242 3242
3243 void WebGLRenderingContext::stencilMaskSeparate(GC3Denum face, GC3Duint mask) 3243 void WebGLRenderingContext::stencilMaskSeparate(GC3Denum face, GC3Duint mask)
3244 { 3244 {
3245 if (isContextLost()) 3245 if (isContextLost())
3246 return; 3246 return;
3247 switch (face) { 3247 switch (face) {
3248 case GraphicsContext3D::FRONT_AND_BACK: 3248 case GL_FRONT_AND_BACK:
3249 m_stencilMask = mask; 3249 m_stencilMask = mask;
3250 m_stencilMaskBack = mask; 3250 m_stencilMaskBack = mask;
3251 break; 3251 break;
3252 case GraphicsContext3D::FRONT: 3252 case GL_FRONT:
3253 m_stencilMask = mask; 3253 m_stencilMask = mask;
3254 break; 3254 break;
3255 case GraphicsContext3D::BACK: 3255 case GL_BACK:
3256 m_stencilMaskBack = mask; 3256 m_stencilMaskBack = mask;
3257 break; 3257 break;
3258 default: 3258 default:
3259 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "stencilMaskSeparate" , "invalid face"); 3259 synthesizeGLError(GL_INVALID_ENUM, "stencilMaskSeparate", "invalid face" );
3260 return; 3260 return;
3261 } 3261 }
3262 m_context->stencilMaskSeparate(face, mask); 3262 m_context->stencilMaskSeparate(face, mask);
3263 } 3263 }
3264 3264
3265 void WebGLRenderingContext::stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zp ass) 3265 void WebGLRenderingContext::stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zp ass)
3266 { 3266 {
3267 if (isContextLost()) 3267 if (isContextLost())
3268 return; 3268 return;
3269 m_context->stencilOp(fail, zfail, zpass); 3269 m_context->stencilOp(fail, zfail, zpass);
(...skipping 17 matching lines...) Expand all
3287 ASSERT(!pixels || validateSettableTexFormat("texImage2D", internalformat)); 3287 ASSERT(!pixels || validateSettableTexFormat("texImage2D", internalformat));
3288 m_context->texImage2D(target, level, internalformat, width, height, 3288 m_context->texImage2D(target, level, internalformat, width, height,
3289 border, format, type, pixels); 3289 border, format, type, pixels);
3290 tex->setLevelInfo(target, level, internalformat, width, height, type); 3290 tex->setLevelInfo(target, level, internalformat, width, height, type);
3291 } 3291 }
3292 3292
3293 void WebGLRenderingContext::texImage2DImpl(GC3Denum target, GC3Dint level, GC3De num internalformat, GC3Denum format, GC3Denum type, Image* image, GraphicsContex t3D::ImageHtmlDomSource domSource, bool flipY, bool premultiplyAlpha, ExceptionS tate& exceptionState) 3293 void WebGLRenderingContext::texImage2DImpl(GC3Denum target, GC3Dint level, GC3De num internalformat, GC3Denum format, GC3Denum type, Image* image, GraphicsContex t3D::ImageHtmlDomSource domSource, bool flipY, bool premultiplyAlpha, ExceptionS tate& exceptionState)
3294 { 3294 {
3295 // All calling functions check isContextLost, so a duplicate check is not ne eded here. 3295 // All calling functions check isContextLost, so a duplicate check is not ne eded here.
3296 Vector<uint8_t> data; 3296 Vector<uint8_t> data;
3297 GraphicsContext3D::ImageExtractor imageExtractor(image, domSource, premultip lyAlpha, m_unpackColorspaceConversion == GraphicsContext3D::NONE); 3297 GraphicsContext3D::ImageExtractor imageExtractor(image, domSource, premultip lyAlpha, m_unpackColorspaceConversion == GL_NONE);
3298 if (!imageExtractor.extractSucceeded()) { 3298 if (!imageExtractor.extractSucceeded()) {
3299 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "texImage2D", "bad i mage data"); 3299 synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "bad image data");
3300 return; 3300 return;
3301 } 3301 }
3302 GraphicsContext3D::DataFormat sourceDataFormat = imageExtractor.imageSourceF ormat(); 3302 GraphicsContext3D::DataFormat sourceDataFormat = imageExtractor.imageSourceF ormat();
3303 GraphicsContext3D::AlphaOp alphaOp = imageExtractor.imageAlphaOp(); 3303 GraphicsContext3D::AlphaOp alphaOp = imageExtractor.imageAlphaOp();
3304 const void* imagePixelData = imageExtractor.imagePixelData(); 3304 const void* imagePixelData = imageExtractor.imagePixelData();
3305 3305
3306 bool needConversion = true; 3306 bool needConversion = true;
3307 if (type == GraphicsContext3D::UNSIGNED_BYTE && sourceDataFormat == Graphics Context3D::DataFormatRGBA8 && format == GraphicsContext3D::RGBA && alphaOp == Gr aphicsContext3D::AlphaDoNothing && !flipY) 3307 if (type == GL_UNSIGNED_BYTE && sourceDataFormat == GraphicsContext3D::DataF ormatRGBA8 && format == GL_RGBA && alphaOp == GraphicsContext3D::AlphaDoNothing && !flipY)
3308 needConversion = false; 3308 needConversion = false;
3309 else { 3309 else {
3310 if (!m_context->packImageData(image, imagePixelData, format, type, flipY , alphaOp, sourceDataFormat, imageExtractor.imageWidth(), imageExtractor.imageHe ight(), imageExtractor.imageSourceUnpackAlignment(), data)) { 3310 if (!m_context->packImageData(image, imagePixelData, format, type, flipY , alphaOp, sourceDataFormat, imageExtractor.imageWidth(), imageExtractor.imageHe ight(), imageExtractor.imageSourceUnpackAlignment(), data)) {
3311 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "texImage2D", "p ackImage error"); 3311 synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "packImage error") ;
3312 return; 3312 return;
3313 } 3313 }
3314 } 3314 }
3315 3315
3316 if (m_unpackAlignment != 1) 3316 if (m_unpackAlignment != 1)
3317 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); 3317 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
3318 texImage2DBase(target, level, internalformat, image->width(), image->height( ), 0, format, type, needConversion ? data.data() : imagePixelData, exceptionStat e); 3318 texImage2DBase(target, level, internalformat, image->width(), image->height( ), 0, format, type, needConversion ? data.data() : imagePixelData, exceptionStat e);
3319 if (m_unpackAlignment != 1) 3319 if (m_unpackAlignment != 1)
3320 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlig nment); 3320 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
3321 } 3321 }
3322 3322
3323 bool WebGLRenderingContext::validateTexFunc(const char* functionName, TexFuncVal idationFunctionType functionType, TexFuncValidationSourceType sourceType, GC3Den um target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei he ight, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint xoffset, GC3Dint y offset) 3323 bool WebGLRenderingContext::validateTexFunc(const char* functionName, TexFuncVal idationFunctionType functionType, TexFuncValidationSourceType sourceType, GC3Den um target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei he ight, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint xoffset, GC3Dint y offset)
3324 { 3324 {
3325 if (!validateTexFuncParameters(functionName, functionType, target, level, in ternalformat, width, height, border, format, type)) 3325 if (!validateTexFuncParameters(functionName, functionType, target, level, in ternalformat, width, height, border, format, type))
3326 return false; 3326 return false;
3327 3327
3328 WebGLTexture* texture = validateTextureBinding(functionName, target, true); 3328 WebGLTexture* texture = validateTextureBinding(functionName, target, true);
3329 if (!texture) 3329 if (!texture)
3330 return false; 3330 return false;
3331 3331
3332 if (functionType == NotTexSubImage2D) { 3332 if (functionType == NotTexSubImage2D) {
3333 if (level && WebGLTexture::isNPOT(width, height)) { 3333 if (level && WebGLTexture::isNPOT(width, height)) {
3334 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "l evel > 0 not power of 2"); 3334 synthesizeGLError(GL_INVALID_VALUE, functionName, "level > 0 not pow er of 2");
3335 return false; 3335 return false;
3336 } 3336 }
3337 // For SourceArrayBufferView, function validateTexFuncData() would handl e whether to validate the SettableTexFormat 3337 // For SourceArrayBufferView, function validateTexFuncData() would handl e whether to validate the SettableTexFormat
3338 // by checking if the ArrayBufferView is null or not. 3338 // by checking if the ArrayBufferView is null or not.
3339 if (sourceType != SourceArrayBufferView) { 3339 if (sourceType != SourceArrayBufferView) {
3340 if (!validateSettableTexFormat(functionName, format)) 3340 if (!validateSettableTexFormat(functionName, format))
3341 return false; 3341 return false;
3342 } 3342 }
3343 } else { 3343 } else {
3344 if (!validateSettableTexFormat(functionName, format)) 3344 if (!validateSettableTexFormat(functionName, format))
3345 return false; 3345 return false;
3346 if (!validateSize(functionName, xoffset, yoffset)) 3346 if (!validateSize(functionName, xoffset, yoffset))
3347 return false; 3347 return false;
3348 // Before checking if it is in the range, check if overflow happens firs t. 3348 // Before checking if it is in the range, check if overflow happens firs t.
3349 if (xoffset + width < 0 || yoffset + height < 0) { 3349 if (xoffset + width < 0 || yoffset + height < 0) {
3350 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "b ad dimensions"); 3350 synthesizeGLError(GL_INVALID_VALUE, functionName, "bad dimensions");
3351 return false; 3351 return false;
3352 } 3352 }
3353 if (xoffset + width > texture->getWidth(target, level) || yoffset + heig ht > texture->getHeight(target, level)) { 3353 if (xoffset + width > texture->getWidth(target, level) || yoffset + heig ht > texture->getHeight(target, level)) {
3354 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "d imensions out of range"); 3354 synthesizeGLError(GL_INVALID_VALUE, functionName, "dimensions out of range");
3355 return false; 3355 return false;
3356 } 3356 }
3357 if (texture->getInternalFormat(target, level) != format || texture->getT ype(target, level) != type) { 3357 if (texture->getInternalFormat(target, level) != format || texture->getT ype(target, level) != type) {
3358 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "type and format do not match texture"); 3358 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type and form at do not match texture");
3359 return false; 3359 return false;
3360 } 3360 }
3361 } 3361 }
3362 3362
3363 return true; 3363 return true;
3364 } 3364 }
3365 3365
3366 PassRefPtr<Image> WebGLRenderingContext::drawImageIntoBuffer(Image* image, int w idth, int height) 3366 PassRefPtr<Image> WebGLRenderingContext::drawImageIntoBuffer(Image* image, int w idth, int height)
3367 { 3367 {
3368 IntSize size(width, height); 3368 IntSize size(width, height);
3369 ImageBuffer* buf = m_generatedImageCache.imageBuffer(size); 3369 ImageBuffer* buf = m_generatedImageCache.imageBuffer(size);
3370 if (!buf) { 3370 if (!buf) {
3371 synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY, "texImage2D", "out o f memory"); 3371 synthesizeGLError(GL_OUT_OF_MEMORY, "texImage2D", "out of memory");
3372 return 0; 3372 return 0;
3373 } 3373 }
3374 3374
3375 IntRect srcRect(IntPoint(), image->size()); 3375 IntRect srcRect(IntPoint(), image->size());
3376 IntRect destRect(0, 0, size.width(), size.height()); 3376 IntRect destRect(0, 0, size.width(), size.height());
3377 buf->context()->drawImage(image, destRect, srcRect); 3377 buf->context()->drawImage(image, destRect, srcRect);
3378 return buf->copyImage(ImageBuffer::fastCopyImageMode()); 3378 return buf->copyImage(ImageBuffer::fastCopyImageMode());
3379 } 3379 }
3380 3380
3381 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, 3381 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
(...skipping 10 matching lines...) Expand all
3392 if (!m_context->extractTextureData(width, height, format, type, 3392 if (!m_context->extractTextureData(width, height, format, type,
3393 m_unpackAlignment, 3393 m_unpackAlignment,
3394 m_unpackFlipY, m_unpackPremultiplyAlp ha, 3394 m_unpackFlipY, m_unpackPremultiplyAlp ha,
3395 data, 3395 data,
3396 tempData)) 3396 tempData))
3397 return; 3397 return;
3398 data = tempData.data(); 3398 data = tempData.data();
3399 changeUnpackAlignment = true; 3399 changeUnpackAlignment = true;
3400 } 3400 }
3401 if (changeUnpackAlignment) 3401 if (changeUnpackAlignment)
3402 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); 3402 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
3403 texImage2DBase(target, level, internalformat, width, height, border, format, type, data, exceptionState); 3403 texImage2DBase(target, level, internalformat, width, height, border, format, type, data, exceptionState);
3404 if (changeUnpackAlignment) 3404 if (changeUnpackAlignment)
3405 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlig nment); 3405 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
3406 } 3406 }
3407 3407
3408 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, 3408 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
3409 GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionState& exception State) 3409 GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionState& exception State)
3410 { 3410 {
3411 if (isContextLost() || !pixels || !validateTexFunc("texImage2D", NotTexSubIm age2D, SourceImageData, target, level, internalformat, pixels->width(), pixels-> height(), 0, format, type, 0, 0)) 3411 if (isContextLost() || !pixels || !validateTexFunc("texImage2D", NotTexSubIm age2D, SourceImageData, target, level, internalformat, pixels->width(), pixels-> height(), 0, format, type, 0, 0))
3412 return; 3412 return;
3413 Vector<uint8_t> data; 3413 Vector<uint8_t> data;
3414 bool needConversion = true; 3414 bool needConversion = true;
3415 // The data from ImageData is always of format RGBA8. 3415 // The data from ImageData is always of format RGBA8.
3416 // No conversion is needed if destination format is RGBA and type is USIGNED _BYTE and no Flip or Premultiply operation is required. 3416 // No conversion is needed if destination format is RGBA and type is USIGNED _BYTE and no Flip or Premultiply operation is required.
3417 if (!m_unpackFlipY && !m_unpackPremultiplyAlpha && format == GraphicsContext 3D::RGBA && type == GraphicsContext3D::UNSIGNED_BYTE) 3417 if (!m_unpackFlipY && !m_unpackPremultiplyAlpha && format == GL_RGBA && type == GL_UNSIGNED_BYTE)
3418 needConversion = false; 3418 needConversion = false;
3419 else { 3419 else {
3420 if (!m_context->extractImageData(pixels->data()->data(), pixels->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) { 3420 if (!m_context->extractImageData(pixels->data()->data(), pixels->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) {
3421 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "texImage2D", "b ad image data"); 3421 synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "bad image data");
3422 return; 3422 return;
3423 } 3423 }
3424 } 3424 }
3425 if (m_unpackAlignment != 1) 3425 if (m_unpackAlignment != 1)
3426 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); 3426 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
3427 texImage2DBase(target, level, internalformat, pixels->width(), pixels->heigh t(), 0, format, type, needConversion ? data.data() : pixels->data()->data(), exc eptionState); 3427 texImage2DBase(target, level, internalformat, pixels->width(), pixels->heigh t(), 0, format, type, needConversion ? data.data() : pixels->data()->data(), exc eptionState);
3428 if (m_unpackAlignment != 1) 3428 if (m_unpackAlignment != 1)
3429 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlig nment); 3429 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
3430 } 3430 }
3431 3431
3432 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, 3432 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
3433 GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionState& exc eptionState) 3433 GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionState& exc eptionState)
3434 { 3434 {
3435 if (isContextLost() || !validateHTMLImageElement("texImage2D", image, except ionState)) 3435 if (isContextLost() || !validateHTMLImageElement("texImage2D", image, except ionState))
3436 return; 3436 return;
3437 3437
3438 RefPtr<Image> imageForRender = image->cachedImage()->imageForRenderer(image- >renderer()); 3438 RefPtr<Image> imageForRender = image->cachedImage()->imageForRenderer(image- >renderer());
3439 if (imageForRender->isSVGImage()) 3439 if (imageForRender->isSVGImage())
3440 imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width( ), image->height()); 3440 imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width( ), image->height());
3441 3441
3442 if (!imageForRender || !validateTexFunc("texImage2D", NotTexSubImage2D, Sour ceHTMLImageElement, target, level, internalformat, imageForRender->width(), imag eForRender->height(), 0, format, type, 0, 0)) 3442 if (!imageForRender || !validateTexFunc("texImage2D", NotTexSubImage2D, Sour ceHTMLImageElement, target, level, internalformat, imageForRender->width(), imag eForRender->height(), 0, format, type, 0, 0))
3443 return; 3443 return;
3444 3444
3445 texImage2DImpl(target, level, internalformat, format, type, imageForRender.g et(), GraphicsContext3D::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha, exceptionState); 3445 texImage2DImpl(target, level, internalformat, format, type, imageForRender.g et(), GraphicsContext3D::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha, exceptionState);
3446 } 3446 }
3447 3447
3448 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, 3448 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
3449 GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionState& e xceptionState) 3449 GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionState& e xceptionState)
3450 { 3450 {
3451 if (isContextLost() || !validateHTMLCanvasElement("texImage2D", canvas, exce ptionState) || !validateTexFunc("texImage2D", NotTexSubImage2D, SourceHTMLCanvas Element, target, level, internalformat, canvas->width(), canvas->height(), 0, fo rmat, type, 0, 0)) 3451 if (isContextLost() || !validateHTMLCanvasElement("texImage2D", canvas, exce ptionState) || !validateTexFunc("texImage2D", NotTexSubImage2D, SourceHTMLCanvas Element, target, level, internalformat, canvas->width(), canvas->height(), 0, fo rmat, type, 0, 0))
3452 return; 3452 return;
3453 3453
3454 WebGLTexture* texture = validateTextureBinding("texImage2D", target, true); 3454 WebGLTexture* texture = validateTextureBinding("texImage2D", target, true);
3455 // If possible, copy from the canvas element directly to the texture 3455 // If possible, copy from the canvas element directly to the texture
3456 // via the GPU, without a read-back to system memory. 3456 // via the GPU, without a read-back to system memory.
3457 if (GraphicsContext3D::TEXTURE_2D == target && texture) { 3457 if (GL_TEXTURE_2D == target && texture) {
3458 if (!canvas->is3D()) { 3458 if (!canvas->is3D()) {
3459 ImageBuffer* buffer = canvas->buffer(); 3459 ImageBuffer* buffer = canvas->buffer();
3460 if (buffer && buffer->copyToPlatformTexture(*m_context.get(), textur e->object(), internalformat, type, 3460 if (buffer && buffer->copyToPlatformTexture(*m_context.get(), textur e->object(), internalformat, type,
3461 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) { 3461 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) {
3462 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); 3462 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type);
3463 return; 3463 return;
3464 } 3464 }
3465 } else { 3465 } else {
3466 WebGLRenderingContext* gl = toWebGLRenderingContext(canvas->renderin gContext()); 3466 WebGLRenderingContext* gl = toWebGLRenderingContext(canvas->renderin gContext());
3467 if (gl && gl->m_drawingBuffer->copyToPlatformTexture(*m_context.get( ), texture->object(), internalformat, type, 3467 if (gl && gl->m_drawingBuffer->copyToPlatformTexture(*m_context.get( ), texture->object(), internalformat, type,
3468 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) { 3468 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) {
3469 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); 3469 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type);
3470 return; 3470 return;
3471 } 3471 }
3472 } 3472 }
3473 } 3473 }
3474 3474
3475 RefPtr<ImageData> imageData = canvas->getImageData(); 3475 RefPtr<ImageData> imageData = canvas->getImageData();
3476 if (imageData) 3476 if (imageData)
3477 texImage2D(target, level, internalformat, format, type, imageData.get(), exceptionState); 3477 texImage2D(target, level, internalformat, format, type, imageData.get(), exceptionState);
3478 else 3478 else
3479 texImage2DImpl(target, level, internalformat, format, type, canvas->copi edImage(), GraphicsContext3D::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultiplyA lpha, exceptionState); 3479 texImage2DImpl(target, level, internalformat, format, type, canvas->copi edImage(), GraphicsContext3D::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultiplyA lpha, exceptionState);
3480 } 3480 }
3481 3481
3482 PassRefPtr<Image> WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* vid eo, BackingStoreCopy backingStoreCopy) 3482 PassRefPtr<Image> WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* vid eo, BackingStoreCopy backingStoreCopy)
3483 { 3483 {
3484 IntSize size(video->videoWidth(), video->videoHeight()); 3484 IntSize size(video->videoWidth(), video->videoHeight());
3485 ImageBuffer* buf = m_generatedImageCache.imageBuffer(size); 3485 ImageBuffer* buf = m_generatedImageCache.imageBuffer(size);
3486 if (!buf) { 3486 if (!buf) {
3487 synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY, "texImage2D", "out o f memory"); 3487 synthesizeGLError(GL_OUT_OF_MEMORY, "texImage2D", "out of memory");
3488 return 0; 3488 return 0;
3489 } 3489 }
3490 IntRect destRect(0, 0, size.width(), size.height()); 3490 IntRect destRect(0, 0, size.width(), size.height());
3491 // FIXME: Turn this into a GPU-GPU texture copy instead of CPU readback. 3491 // FIXME: Turn this into a GPU-GPU texture copy instead of CPU readback.
3492 video->paintCurrentFrameInContext(buf->context(), destRect); 3492 video->paintCurrentFrameInContext(buf->context(), destRect);
3493 return buf->copyImage(backingStoreCopy); 3493 return buf->copyImage(backingStoreCopy);
3494 } 3494 }
3495 3495
3496 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, 3496 void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
3497 GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionState& exc eptionState) 3497 GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionState& exc eptionState)
3498 { 3498 {
3499 if (isContextLost() || !validateHTMLVideoElement("texImage2D", video, except ionState) 3499 if (isContextLost() || !validateHTMLVideoElement("texImage2D", video, except ionState)
3500 || !validateTexFunc("texImage2D", NotTexSubImage2D, SourceHTMLVideoEleme nt, target, level, internalformat, video->videoWidth(), video->videoHeight(), 0, format, type, 0, 0)) 3500 || !validateTexFunc("texImage2D", NotTexSubImage2D, SourceHTMLVideoEleme nt, target, level, internalformat, video->videoWidth(), video->videoHeight(), 0, format, type, 0, 0))
3501 return; 3501 return;
3502 3502
3503 // Go through the fast path doing a GPU-GPU textures copy without a readback to system memory if possible. 3503 // Go through the fast path doing a GPU-GPU textures copy without a readback to system memory if possible.
3504 // Otherwise, it will fall back to the normal SW path. 3504 // Otherwise, it will fall back to the normal SW path.
3505 WebGLTexture* texture = validateTextureBinding("texImage2D", target, true); 3505 WebGLTexture* texture = validateTextureBinding("texImage2D", target, true);
3506 if (GraphicsContext3D::TEXTURE_2D == target && texture) { 3506 if (GL_TEXTURE_2D == target && texture) {
3507 if (video->copyVideoTextureToPlatformTexture(m_context.get(), texture->o bject(), level, type, internalformat, m_unpackPremultiplyAlpha, m_unpackFlipY)) { 3507 if (video->copyVideoTextureToPlatformTexture(m_context.get(), texture->o bject(), level, type, internalformat, m_unpackPremultiplyAlpha, m_unpackFlipY)) {
3508 texture->setLevelInfo(target, level, internalformat, video->videoWid th(), video->videoHeight(), type); 3508 texture->setLevelInfo(target, level, internalformat, video->videoWid th(), video->videoHeight(), type);
3509 return; 3509 return;
3510 } 3510 }
3511 } 3511 }
3512 3512
3513 // Normal pure SW path. 3513 // Normal pure SW path.
3514 RefPtr<Image> image = videoFrameToImage(video, ImageBuffer::fastCopyImageMod e()); 3514 RefPtr<Image> image = videoFrameToImage(video, ImageBuffer::fastCopyImageMod e());
3515 if (!image) 3515 if (!image)
3516 return; 3516 return;
3517 texImage2DImpl(target, level, internalformat, format, type, image.get(), Gra phicsContext3D::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha, exception State); 3517 texImage2DImpl(target, level, internalformat, format, type, image.get(), Gra phicsContext3D::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha, exception State);
3518 } 3518 }
3519 3519
3520 void WebGLRenderingContext::texParameter(GC3Denum target, GC3Denum pname, GC3Dfl oat paramf, GC3Dint parami, bool isFloat) 3520 void WebGLRenderingContext::texParameter(GC3Denum target, GC3Denum pname, GC3Dfl oat paramf, GC3Dint parami, bool isFloat)
3521 { 3521 {
3522 if (isContextLost()) 3522 if (isContextLost())
3523 return; 3523 return;
3524 WebGLTexture* tex = validateTextureBinding("texParameter", target, false); 3524 WebGLTexture* tex = validateTextureBinding("texParameter", target, false);
3525 if (!tex) 3525 if (!tex)
3526 return; 3526 return;
3527 switch (pname) { 3527 switch (pname) {
3528 case GraphicsContext3D::TEXTURE_MIN_FILTER: 3528 case GL_TEXTURE_MIN_FILTER:
3529 case GraphicsContext3D::TEXTURE_MAG_FILTER: 3529 case GL_TEXTURE_MAG_FILTER:
3530 break; 3530 break;
3531 case GraphicsContext3D::TEXTURE_WRAP_S: 3531 case GL_TEXTURE_WRAP_S:
3532 case GraphicsContext3D::TEXTURE_WRAP_T: 3532 case GL_TEXTURE_WRAP_T:
3533 if ((isFloat && paramf != GraphicsContext3D::CLAMP_TO_EDGE && paramf != GraphicsContext3D::MIRRORED_REPEAT && paramf != GraphicsContext3D::REPEAT) 3533 if ((isFloat && paramf != GL_CLAMP_TO_EDGE && paramf != GL_MIRRORED_REPE AT && paramf != GL_REPEAT)
3534 || (!isFloat && parami != GraphicsContext3D::CLAMP_TO_EDGE && parami != GraphicsContext3D::MIRRORED_REPEAT && parami != GraphicsContext3D::REPEAT)) { 3534 || (!isFloat && parami != GL_CLAMP_TO_EDGE && parami != GL_MIRRORED_ REPEAT && parami != GL_REPEAT)) {
3535 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "texParameter", " invalid parameter"); 3535 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid paramete r");
3536 return; 3536 return;
3537 } 3537 }
3538 break; 3538 break;
3539 case Extensions3D::TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotr opic 3539 case Extensions3D::TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotr opic
3540 if (!m_extTextureFilterAnisotropic) { 3540 if (!m_extTextureFilterAnisotropic) {
3541 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "texParameter", " invalid parameter, EXT_texture_filter_anisotropic not enabled"); 3541 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid paramete r, EXT_texture_filter_anisotropic not enabled");
3542 return; 3542 return;
3543 } 3543 }
3544 break; 3544 break;
3545 default: 3545 default:
3546 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "texParameter", "inva lid parameter name"); 3546 synthesizeGLError(GL_INVALID_ENUM, "texParameter", "invalid parameter na me");
3547 return; 3547 return;
3548 } 3548 }
3549 if (isFloat) { 3549 if (isFloat) {
3550 tex->setParameterf(pname, paramf); 3550 tex->setParameterf(pname, paramf);
3551 m_context->texParameterf(target, pname, paramf); 3551 m_context->texParameterf(target, pname, paramf);
3552 } else { 3552 } else {
3553 tex->setParameteri(pname, parami); 3553 tex->setParameteri(pname, parami);
3554 m_context->texParameteri(target, pname, parami); 3554 m_context->texParameteri(target, pname, parami);
3555 } 3555 }
3556 } 3556 }
(...skipping 26 matching lines...) Expand all
3583 ASSERT(tex->getHeight(target, level) >= (yoffset + height)); 3583 ASSERT(tex->getHeight(target, level) >= (yoffset + height));
3584 ASSERT(tex->getInternalFormat(target, level) == format); 3584 ASSERT(tex->getInternalFormat(target, level) == format);
3585 ASSERT(tex->getType(target, level) == type); 3585 ASSERT(tex->getType(target, level) == type);
3586 m_context->texSubImage2D(target, level, xoffset, yoffset, width, height, for mat, type, pixels); 3586 m_context->texSubImage2D(target, level, xoffset, yoffset, width, height, for mat, type, pixels);
3587 } 3587 }
3588 3588
3589 void WebGLRenderingContext::texSubImage2DImpl(GC3Denum target, GC3Dint level, GC 3Dint xoffset, GC3Dint yoffset, GC3Denum format, GC3Denum type, Image* image, Gr aphicsContext3D::ImageHtmlDomSource domSource, bool flipY, bool premultiplyAlpha , ExceptionState& exceptionState) 3589 void WebGLRenderingContext::texSubImage2DImpl(GC3Denum target, GC3Dint level, GC 3Dint xoffset, GC3Dint yoffset, GC3Denum format, GC3Denum type, Image* image, Gr aphicsContext3D::ImageHtmlDomSource domSource, bool flipY, bool premultiplyAlpha , ExceptionState& exceptionState)
3590 { 3590 {
3591 // All calling functions check isContextLost, so a duplicate check is not ne eded here. 3591 // All calling functions check isContextLost, so a duplicate check is not ne eded here.
3592 Vector<uint8_t> data; 3592 Vector<uint8_t> data;
3593 GraphicsContext3D::ImageExtractor imageExtractor(image, domSource, premultip lyAlpha, m_unpackColorspaceConversion == GraphicsContext3D::NONE); 3593 GraphicsContext3D::ImageExtractor imageExtractor(image, domSource, premultip lyAlpha, m_unpackColorspaceConversion == GL_NONE);
3594 if (!imageExtractor.extractSucceeded()) { 3594 if (!imageExtractor.extractSucceeded()) {
3595 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "texSubImage2D", "ba d image"); 3595 synthesizeGLError(GL_INVALID_VALUE, "texSubImage2D", "bad image");
3596 return; 3596 return;
3597 } 3597 }
3598 GraphicsContext3D::DataFormat sourceDataFormat = imageExtractor.imageSourceF ormat(); 3598 GraphicsContext3D::DataFormat sourceDataFormat = imageExtractor.imageSourceF ormat();
3599 GraphicsContext3D::AlphaOp alphaOp = imageExtractor.imageAlphaOp(); 3599 GraphicsContext3D::AlphaOp alphaOp = imageExtractor.imageAlphaOp();
3600 const void* imagePixelData = imageExtractor.imagePixelData(); 3600 const void* imagePixelData = imageExtractor.imagePixelData();
3601 3601
3602 bool needConversion = true; 3602 bool needConversion = true;
3603 if (type == GraphicsContext3D::UNSIGNED_BYTE && sourceDataFormat == Graphics Context3D::DataFormatRGBA8 && format == GraphicsContext3D::RGBA && alphaOp == Gr aphicsContext3D::AlphaDoNothing && !flipY) 3603 if (type == GL_UNSIGNED_BYTE && sourceDataFormat == GraphicsContext3D::DataF ormatRGBA8 && format == GL_RGBA && alphaOp == GraphicsContext3D::AlphaDoNothing && !flipY)
3604 needConversion = false; 3604 needConversion = false;
3605 else { 3605 else {
3606 if (!m_context->packImageData(image, imagePixelData, format, type, flipY , alphaOp, sourceDataFormat, imageExtractor.imageWidth(), imageExtractor.imageHe ight(), imageExtractor.imageSourceUnpackAlignment(), data)) { 3606 if (!m_context->packImageData(image, imagePixelData, format, type, flipY , alphaOp, sourceDataFormat, imageExtractor.imageWidth(), imageExtractor.imageHe ight(), imageExtractor.imageSourceUnpackAlignment(), data)) {
3607 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "texImage2D", "b ad image data"); 3607 synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "bad image data");
3608 return; 3608 return;
3609 } 3609 }
3610 } 3610 }
3611 3611
3612 if (m_unpackAlignment != 1) 3612 if (m_unpackAlignment != 1)
3613 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); 3613 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
3614 texSubImage2DBase(target, level, xoffset, yoffset, image->width(), image->he ight(), format, type, needConversion ? data.data() : imagePixelData, exceptionS tate); 3614 texSubImage2DBase(target, level, xoffset, yoffset, image->width(), image->he ight(), format, type, needConversion ? data.data() : imagePixelData, exceptionS tate);
3615 if (m_unpackAlignment != 1) 3615 if (m_unpackAlignment != 1)
3616 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlig nment); 3616 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
3617 } 3617 }
3618 3618
3619 void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din t xoffset, GC3Dint yoffset, 3619 void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din t xoffset, GC3Dint yoffset,
3620 GC3Dsizei width, GC3Dsizei height, 3620 GC3Dsizei width, GC3Dsizei height,
3621 GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionState& exc eptionState) 3621 GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionState& exc eptionState)
3622 { 3622 {
3623 if (isContextLost() || !validateTexFuncData("texSubImage2D", level, width, h eight, format, type, pixels, NullNotAllowed) 3623 if (isContextLost() || !validateTexFuncData("texSubImage2D", level, width, h eight, format, type, pixels, NullNotAllowed)
3624 || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceArrayBufferVie w, target, level, format, width, height, 0, format, type, xoffset, yoffset)) 3624 || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceArrayBufferVie w, target, level, format, width, height, 0, format, type, xoffset, yoffset))
3625 return; 3625 return;
3626 void* data = pixels->baseAddress(); 3626 void* data = pixels->baseAddress();
3627 Vector<uint8_t> tempData; 3627 Vector<uint8_t> tempData;
3628 bool changeUnpackAlignment = false; 3628 bool changeUnpackAlignment = false;
3629 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { 3629 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) {
3630 if (!m_context->extractTextureData(width, height, format, type, 3630 if (!m_context->extractTextureData(width, height, format, type,
3631 m_unpackAlignment, 3631 m_unpackAlignment,
3632 m_unpackFlipY, m_unpackPremultiplyAlp ha, 3632 m_unpackFlipY, m_unpackPremultiplyAlp ha,
3633 data, 3633 data,
3634 tempData)) 3634 tempData))
3635 return; 3635 return;
3636 data = tempData.data(); 3636 data = tempData.data();
3637 changeUnpackAlignment = true; 3637 changeUnpackAlignment = true;
3638 } 3638 }
3639 if (changeUnpackAlignment) 3639 if (changeUnpackAlignment)
3640 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); 3640 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
3641 texSubImage2DBase(target, level, xoffset, yoffset, width, height, format, ty pe, data, exceptionState); 3641 texSubImage2DBase(target, level, xoffset, yoffset, width, height, format, ty pe, data, exceptionState);
3642 if (changeUnpackAlignment) 3642 if (changeUnpackAlignment)
3643 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlig nment); 3643 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
3644 } 3644 }
3645 3645
3646 void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din t xoffset, GC3Dint yoffset, 3646 void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din t xoffset, GC3Dint yoffset,
3647 GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionState& exception State) 3647 GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionState& exception State)
3648 { 3648 {
3649 if (isContextLost() || !pixels || !validateTexFunc("texSubImage2D", TexSubIm age2D, SourceImageData, target, level, format, pixels->width(), pixels->height( ), 0, format, type, xoffset, yoffset)) 3649 if (isContextLost() || !pixels || !validateTexFunc("texSubImage2D", TexSubIm age2D, SourceImageData, target, level, format, pixels->width(), pixels->height( ), 0, format, type, xoffset, yoffset))
3650 return; 3650 return;
3651 3651
3652 Vector<uint8_t> data; 3652 Vector<uint8_t> data;
3653 bool needConversion = true; 3653 bool needConversion = true;
3654 // The data from ImageData is always of format RGBA8. 3654 // The data from ImageData is always of format RGBA8.
3655 // No conversion is needed if destination format is RGBA and type is USIGNED _BYTE and no Flip or Premultiply operation is required. 3655 // No conversion is needed if destination format is RGBA and type is USIGNED _BYTE and no Flip or Premultiply operation is required.
3656 if (format == GraphicsContext3D::RGBA && type == GraphicsContext3D::UNSIGNED _BYTE && !m_unpackFlipY && !m_unpackPremultiplyAlpha) 3656 if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && !m_unpackFlipY && !m_un packPremultiplyAlpha)
3657 needConversion = false; 3657 needConversion = false;
3658 else { 3658 else {
3659 if (!m_context->extractImageData(pixels->data()->data(), pixels->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) { 3659 if (!m_context->extractImageData(pixels->data()->data(), pixels->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) {
3660 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "texSubImage2D", "bad image data"); 3660 synthesizeGLError(GL_INVALID_VALUE, "texSubImage2D", "bad image data ");
3661 return; 3661 return;
3662 } 3662 }
3663 } 3663 }
3664 if (m_unpackAlignment != 1) 3664 if (m_unpackAlignment != 1)
3665 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); 3665 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
3666 texSubImage2DBase(target, level, xoffset, yoffset, pixels->width(), pixels-> height(), format, type, needConversion ? data.data() : pixels->data()->data(), e xceptionState); 3666 texSubImage2DBase(target, level, xoffset, yoffset, pixels->width(), pixels-> height(), format, type, needConversion ? data.data() : pixels->data()->data(), e xceptionState);
3667 if (m_unpackAlignment != 1) 3667 if (m_unpackAlignment != 1)
3668 m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlig nment); 3668 m_context->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
3669 } 3669 }
3670 3670
3671 void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din t xoffset, GC3Dint yoffset, 3671 void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din t xoffset, GC3Dint yoffset,
3672 GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionState& exc eptionState) 3672 GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionState& exc eptionState)
3673 { 3673 {
3674 if (isContextLost() || !validateHTMLImageElement("texSubImage2D", image, exc eptionState)) 3674 if (isContextLost() || !validateHTMLImageElement("texSubImage2D", image, exc eptionState))
3675 return; 3675 return;
3676 3676
3677 RefPtr<Image> imageForRender = image->cachedImage()->imageForRenderer(image- >renderer()); 3677 RefPtr<Image> imageForRender = image->cachedImage()->imageForRenderer(image- >renderer());
3678 if (imageForRender->isSVGImage()) 3678 if (imageForRender->isSVGImage())
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3710 return; 3710 return;
3711 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get() , GraphicsContext3D::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha, exce ptionState); 3711 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get() , GraphicsContext3D::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha, exce ptionState);
3712 } 3712 }
3713 3713
3714 void WebGLRenderingContext::uniform1f(const WebGLUniformLocation* location, GC3D float x) 3714 void WebGLRenderingContext::uniform1f(const WebGLUniformLocation* location, GC3D float x)
3715 { 3715 {
3716 if (isContextLost() || !location) 3716 if (isContextLost() || !location)
3717 return; 3717 return;
3718 3718
3719 if (location->program() != m_currentProgram) { 3719 if (location->program() != m_currentProgram) {
3720 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform1f", "lo cation not for current program"); 3720 synthesizeGLError(GL_INVALID_OPERATION, "uniform1f", "location not for c urrent program");
3721 return; 3721 return;
3722 } 3722 }
3723 3723
3724 m_context->uniform1f(location->location(), x); 3724 m_context->uniform1f(location->location(), x);
3725 } 3725 }
3726 3726
3727 void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, Flo at32Array* v) 3727 void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, Flo at32Array* v)
3728 { 3728 {
3729 if (isContextLost() || !validateUniformParameters("uniform1fv", location, v, 1)) 3729 if (isContextLost() || !validateUniformParameters("uniform1fv", location, v, 1))
3730 return; 3730 return;
3731 3731
3732 m_context->uniform1fv(location->location(), v->length(), v->data()); 3732 m_context->uniform1fv(location->location(), v->length(), v->data());
3733 } 3733 }
3734 3734
3735 void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size) 3735 void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size)
3736 { 3736 {
3737 if (isContextLost() || !validateUniformParameters("uniform1fv", location, v, size, 1)) 3737 if (isContextLost() || !validateUniformParameters("uniform1fv", location, v, size, 1))
3738 return; 3738 return;
3739 3739
3740 m_context->uniform1fv(location->location(), size, v); 3740 m_context->uniform1fv(location->location(), size, v);
3741 } 3741 }
3742 3742
3743 void WebGLRenderingContext::uniform1i(const WebGLUniformLocation* location, GC3D int x) 3743 void WebGLRenderingContext::uniform1i(const WebGLUniformLocation* location, GC3D int x)
3744 { 3744 {
3745 if (isContextLost() || !location) 3745 if (isContextLost() || !location)
3746 return; 3746 return;
3747 3747
3748 if (location->program() != m_currentProgram) { 3748 if (location->program() != m_currentProgram) {
3749 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform1i", "lo cation not for current program"); 3749 synthesizeGLError(GL_INVALID_OPERATION, "uniform1i", "location not for c urrent program");
3750 return; 3750 return;
3751 } 3751 }
3752 3752
3753 m_context->uniform1i(location->location(), x); 3753 m_context->uniform1i(location->location(), x);
3754 } 3754 }
3755 3755
3756 void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, Int 32Array* v) 3756 void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, Int 32Array* v)
3757 { 3757 {
3758 if (isContextLost() || !validateUniformParameters("uniform1iv", location, v, 1)) 3758 if (isContextLost() || !validateUniformParameters("uniform1iv", location, v, 1))
3759 return; 3759 return;
3760 3760
3761 m_context->uniform1iv(location->location(), v->length(), v->data()); 3761 m_context->uniform1iv(location->location(), v->length(), v->data());
3762 } 3762 }
3763 3763
3764 void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, GC3 Dint* v, GC3Dsizei size) 3764 void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, GC3 Dint* v, GC3Dsizei size)
3765 { 3765 {
3766 if (isContextLost() || !validateUniformParameters("uniform1iv", location, v, size, 1)) 3766 if (isContextLost() || !validateUniformParameters("uniform1iv", location, v, size, 1))
3767 return; 3767 return;
3768 3768
3769 m_context->uniform1iv(location->location(), size, v); 3769 m_context->uniform1iv(location->location(), size, v);
3770 } 3770 }
3771 3771
3772 void WebGLRenderingContext::uniform2f(const WebGLUniformLocation* location, GC3D float x, GC3Dfloat y) 3772 void WebGLRenderingContext::uniform2f(const WebGLUniformLocation* location, GC3D float x, GC3Dfloat y)
3773 { 3773 {
3774 if (isContextLost() || !location) 3774 if (isContextLost() || !location)
3775 return; 3775 return;
3776 3776
3777 if (location->program() != m_currentProgram) { 3777 if (location->program() != m_currentProgram) {
3778 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform2f", "lo cation not for current program"); 3778 synthesizeGLError(GL_INVALID_OPERATION, "uniform2f", "location not for c urrent program");
3779 return; 3779 return;
3780 } 3780 }
3781 3781
3782 m_context->uniform2f(location->location(), x, y); 3782 m_context->uniform2f(location->location(), x, y);
3783 } 3783 }
3784 3784
3785 void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, Flo at32Array* v) 3785 void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, Flo at32Array* v)
3786 { 3786 {
3787 if (isContextLost() || !validateUniformParameters("uniform2fv", location, v, 2)) 3787 if (isContextLost() || !validateUniformParameters("uniform2fv", location, v, 2))
3788 return; 3788 return;
3789 3789
3790 m_context->uniform2fv(location->location(), v->length() / 2, v->data()); 3790 m_context->uniform2fv(location->location(), v->length() / 2, v->data());
3791 } 3791 }
3792 3792
3793 void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size) 3793 void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size)
3794 { 3794 {
3795 if (isContextLost() || !validateUniformParameters("uniform2fv", location, v, size, 2)) 3795 if (isContextLost() || !validateUniformParameters("uniform2fv", location, v, size, 2))
3796 return; 3796 return;
3797 3797
3798 m_context->uniform2fv(location->location(), size / 2, v); 3798 m_context->uniform2fv(location->location(), size / 2, v);
3799 } 3799 }
3800 3800
3801 void WebGLRenderingContext::uniform2i(const WebGLUniformLocation* location, GC3D int x, GC3Dint y) 3801 void WebGLRenderingContext::uniform2i(const WebGLUniformLocation* location, GC3D int x, GC3Dint y)
3802 { 3802 {
3803 if (isContextLost() || !location) 3803 if (isContextLost() || !location)
3804 return; 3804 return;
3805 3805
3806 if (location->program() != m_currentProgram) { 3806 if (location->program() != m_currentProgram) {
3807 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform2i", "lo cation not for current program"); 3807 synthesizeGLError(GL_INVALID_OPERATION, "uniform2i", "location not for c urrent program");
3808 return; 3808 return;
3809 } 3809 }
3810 3810
3811 m_context->uniform2i(location->location(), x, y); 3811 m_context->uniform2i(location->location(), x, y);
3812 } 3812 }
3813 3813
3814 void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, Int 32Array* v) 3814 void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, Int 32Array* v)
3815 { 3815 {
3816 if (isContextLost() || !validateUniformParameters("uniform2iv", location, v, 2)) 3816 if (isContextLost() || !validateUniformParameters("uniform2iv", location, v, 2))
3817 return; 3817 return;
3818 3818
3819 m_context->uniform2iv(location->location(), v->length() / 2, v->data()); 3819 m_context->uniform2iv(location->location(), v->length() / 2, v->data());
3820 } 3820 }
3821 3821
3822 void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, GC3 Dint* v, GC3Dsizei size) 3822 void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, GC3 Dint* v, GC3Dsizei size)
3823 { 3823 {
3824 if (isContextLost() || !validateUniformParameters("uniform2iv", location, v, size, 2)) 3824 if (isContextLost() || !validateUniformParameters("uniform2iv", location, v, size, 2))
3825 return; 3825 return;
3826 3826
3827 m_context->uniform2iv(location->location(), size / 2, v); 3827 m_context->uniform2iv(location->location(), size / 2, v);
3828 } 3828 }
3829 3829
3830 void WebGLRenderingContext::uniform3f(const WebGLUniformLocation* location, GC3D float x, GC3Dfloat y, GC3Dfloat z) 3830 void WebGLRenderingContext::uniform3f(const WebGLUniformLocation* location, GC3D float x, GC3Dfloat y, GC3Dfloat z)
3831 { 3831 {
3832 if (isContextLost() || !location) 3832 if (isContextLost() || !location)
3833 return; 3833 return;
3834 3834
3835 if (location->program() != m_currentProgram) { 3835 if (location->program() != m_currentProgram) {
3836 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform3f", "lo cation not for current program"); 3836 synthesizeGLError(GL_INVALID_OPERATION, "uniform3f", "location not for c urrent program");
3837 return; 3837 return;
3838 } 3838 }
3839 3839
3840 m_context->uniform3f(location->location(), x, y, z); 3840 m_context->uniform3f(location->location(), x, y, z);
3841 } 3841 }
3842 3842
3843 void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, Flo at32Array* v) 3843 void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, Flo at32Array* v)
3844 { 3844 {
3845 if (isContextLost() || !validateUniformParameters("uniform3fv", location, v, 3)) 3845 if (isContextLost() || !validateUniformParameters("uniform3fv", location, v, 3))
3846 return; 3846 return;
3847 3847
3848 m_context->uniform3fv(location->location(), v->length() / 3, v->data()); 3848 m_context->uniform3fv(location->location(), v->length() / 3, v->data());
3849 } 3849 }
3850 3850
3851 void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size) 3851 void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size)
3852 { 3852 {
3853 if (isContextLost() || !validateUniformParameters("uniform3fv", location, v, size, 3)) 3853 if (isContextLost() || !validateUniformParameters("uniform3fv", location, v, size, 3))
3854 return; 3854 return;
3855 3855
3856 m_context->uniform3fv(location->location(), size / 3, v); 3856 m_context->uniform3fv(location->location(), size / 3, v);
3857 } 3857 }
3858 3858
3859 void WebGLRenderingContext::uniform3i(const WebGLUniformLocation* location, GC3D int x, GC3Dint y, GC3Dint z) 3859 void WebGLRenderingContext::uniform3i(const WebGLUniformLocation* location, GC3D int x, GC3Dint y, GC3Dint z)
3860 { 3860 {
3861 if (isContextLost() || !location) 3861 if (isContextLost() || !location)
3862 return; 3862 return;
3863 3863
3864 if (location->program() != m_currentProgram) { 3864 if (location->program() != m_currentProgram) {
3865 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform3i", "lo cation not for current program"); 3865 synthesizeGLError(GL_INVALID_OPERATION, "uniform3i", "location not for c urrent program");
3866 return; 3866 return;
3867 } 3867 }
3868 3868
3869 m_context->uniform3i(location->location(), x, y, z); 3869 m_context->uniform3i(location->location(), x, y, z);
3870 } 3870 }
3871 3871
3872 void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, Int 32Array* v) 3872 void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, Int 32Array* v)
3873 { 3873 {
3874 if (isContextLost() || !validateUniformParameters("uniform3iv", location, v, 3)) 3874 if (isContextLost() || !validateUniformParameters("uniform3iv", location, v, 3))
3875 return; 3875 return;
3876 3876
3877 m_context->uniform3iv(location->location(), v->length() / 3, v->data()); 3877 m_context->uniform3iv(location->location(), v->length() / 3, v->data());
3878 } 3878 }
3879 3879
3880 void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, GC3 Dint* v, GC3Dsizei size) 3880 void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, GC3 Dint* v, GC3Dsizei size)
3881 { 3881 {
3882 if (isContextLost() || !validateUniformParameters("uniform3iv", location, v, size, 3)) 3882 if (isContextLost() || !validateUniformParameters("uniform3iv", location, v, size, 3))
3883 return; 3883 return;
3884 3884
3885 m_context->uniform3iv(location->location(), size / 3, v); 3885 m_context->uniform3iv(location->location(), size / 3, v);
3886 } 3886 }
3887 3887
3888 void WebGLRenderingContext::uniform4f(const WebGLUniformLocation* location, GC3D float x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w) 3888 void WebGLRenderingContext::uniform4f(const WebGLUniformLocation* location, GC3D float x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w)
3889 { 3889 {
3890 if (isContextLost() || !location) 3890 if (isContextLost() || !location)
3891 return; 3891 return;
3892 3892
3893 if (location->program() != m_currentProgram) { 3893 if (location->program() != m_currentProgram) {
3894 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform4f", "lo cation not for current program"); 3894 synthesizeGLError(GL_INVALID_OPERATION, "uniform4f", "location not for c urrent program");
3895 return; 3895 return;
3896 } 3896 }
3897 3897
3898 m_context->uniform4f(location->location(), x, y, z, w); 3898 m_context->uniform4f(location->location(), x, y, z, w);
3899 } 3899 }
3900 3900
3901 void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, Flo at32Array* v) 3901 void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, Flo at32Array* v)
3902 { 3902 {
3903 if (isContextLost() || !validateUniformParameters("uniform4fv", location, v, 4)) 3903 if (isContextLost() || !validateUniformParameters("uniform4fv", location, v, 4))
3904 return; 3904 return;
3905 3905
3906 m_context->uniform4fv(location->location(), v->length() / 4, v->data()); 3906 m_context->uniform4fv(location->location(), v->length() / 4, v->data());
3907 } 3907 }
3908 3908
3909 void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size) 3909 void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, GC3 Dfloat* v, GC3Dsizei size)
3910 { 3910 {
3911 if (isContextLost() || !validateUniformParameters("uniform4fv", location, v, size, 4)) 3911 if (isContextLost() || !validateUniformParameters("uniform4fv", location, v, size, 4))
3912 return; 3912 return;
3913 3913
3914 m_context->uniform4fv(location->location(), size / 4, v); 3914 m_context->uniform4fv(location->location(), size / 4, v);
3915 } 3915 }
3916 3916
3917 void WebGLRenderingContext::uniform4i(const WebGLUniformLocation* location, GC3D int x, GC3Dint y, GC3Dint z, GC3Dint w) 3917 void WebGLRenderingContext::uniform4i(const WebGLUniformLocation* location, GC3D int x, GC3Dint y, GC3Dint z, GC3Dint w)
3918 { 3918 {
3919 if (isContextLost() || !location) 3919 if (isContextLost() || !location)
3920 return; 3920 return;
3921 3921
3922 if (location->program() != m_currentProgram) { 3922 if (location->program() != m_currentProgram) {
3923 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "uniform4i", "lo cation not for current program"); 3923 synthesizeGLError(GL_INVALID_OPERATION, "uniform4i", "location not for c urrent program");
3924 return; 3924 return;
3925 } 3925 }
3926 3926
3927 m_context->uniform4i(location->location(), x, y, z, w); 3927 m_context->uniform4i(location->location(), x, y, z, w);
3928 } 3928 }
3929 3929
3930 void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, Int 32Array* v) 3930 void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, Int 32Array* v)
3931 { 3931 {
3932 if (isContextLost() || !validateUniformParameters("uniform4iv", location, v, 4)) 3932 if (isContextLost() || !validateUniformParameters("uniform4iv", location, v, 4))
3933 return; 3933 return;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3986 } 3986 }
3987 3987
3988 void WebGLRenderingContext::useProgram(WebGLProgram* program) 3988 void WebGLRenderingContext::useProgram(WebGLProgram* program)
3989 { 3989 {
3990 bool deleted; 3990 bool deleted;
3991 if (!checkObjectToBeBound("useProgram", program, deleted)) 3991 if (!checkObjectToBeBound("useProgram", program, deleted))
3992 return; 3992 return;
3993 if (deleted) 3993 if (deleted)
3994 program = 0; 3994 program = 0;
3995 if (program && !program->linkStatus()) { 3995 if (program && !program->linkStatus()) {
3996 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "useProgram", "p rogram not valid"); 3996 synthesizeGLError(GL_INVALID_OPERATION, "useProgram", "program not valid ");
3997 return; 3997 return;
3998 } 3998 }
3999 if (m_currentProgram != program) { 3999 if (m_currentProgram != program) {
4000 if (m_currentProgram) 4000 if (m_currentProgram)
4001 m_currentProgram->onDetached(graphicsContext3D()); 4001 m_currentProgram->onDetached(graphicsContext3D());
4002 m_currentProgram = program; 4002 m_currentProgram = program;
4003 m_context->useProgram(objectOrZero(program)); 4003 m_context->useProgram(objectOrZero(program));
4004 if (program) 4004 if (program)
4005 program->onAttached(); 4005 program->onAttached();
4006 } 4006 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4071 void WebGLRenderingContext::vertexAttrib4fv(GC3Duint index, GC3Dfloat* v, GC3Dsi zei size) 4071 void WebGLRenderingContext::vertexAttrib4fv(GC3Duint index, GC3Dfloat* v, GC3Dsi zei size)
4072 { 4072 {
4073 vertexAttribfvImpl("vertexAttrib4fv", index, v, size, 4); 4073 vertexAttribfvImpl("vertexAttrib4fv", index, v, size, 4);
4074 } 4074 }
4075 4075
4076 void WebGLRenderingContext::vertexAttribPointer(GC3Duint index, GC3Dint size, GC 3Denum type, GC3Dboolean normalized, GC3Dsizei stride, long long offset) 4076 void WebGLRenderingContext::vertexAttribPointer(GC3Duint index, GC3Dint size, GC 3Denum type, GC3Dboolean normalized, GC3Dsizei stride, long long offset)
4077 { 4077 {
4078 if (isContextLost()) 4078 if (isContextLost())
4079 return; 4079 return;
4080 switch (type) { 4080 switch (type) {
4081 case GraphicsContext3D::BYTE: 4081 case GL_BYTE:
4082 case GraphicsContext3D::UNSIGNED_BYTE: 4082 case GL_UNSIGNED_BYTE:
4083 case GraphicsContext3D::SHORT: 4083 case GL_SHORT:
4084 case GraphicsContext3D::UNSIGNED_SHORT: 4084 case GL_UNSIGNED_SHORT:
4085 case GraphicsContext3D::FLOAT: 4085 case GL_FLOAT:
4086 break; 4086 break;
4087 default: 4087 default:
4088 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "vertexAttribPointer" , "invalid type"); 4088 synthesizeGLError(GL_INVALID_ENUM, "vertexAttribPointer", "invalid type" );
4089 return; 4089 return;
4090 } 4090 }
4091 if (index >= m_maxVertexAttribs) { 4091 if (index >= m_maxVertexAttribs) {
4092 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "vertexAttribPointer ", "index out of range"); 4092 synthesizeGLError(GL_INVALID_VALUE, "vertexAttribPointer", "index out of range");
4093 return; 4093 return;
4094 } 4094 }
4095 if (size < 1 || size > 4 || stride < 0 || stride > 255 || offset < 0) { 4095 if (size < 1 || size > 4 || stride < 0 || stride > 255 || offset < 0) {
4096 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "vertexAttribPointer ", "bad size, stride or offset"); 4096 synthesizeGLError(GL_INVALID_VALUE, "vertexAttribPointer", "bad size, st ride or offset");
4097 return; 4097 return;
4098 } 4098 }
4099 if (!m_boundArrayBuffer) { 4099 if (!m_boundArrayBuffer) {
4100 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "vertexAttribPoi nter", "no bound ARRAY_BUFFER"); 4100 synthesizeGLError(GL_INVALID_OPERATION, "vertexAttribPointer", "no bound ARRAY_BUFFER");
4101 return; 4101 return;
4102 } 4102 }
4103 // Determine the number of elements the bound buffer can hold, given the off set, size, type and stride 4103 // Determine the number of elements the bound buffer can hold, given the off set, size, type and stride
4104 unsigned int typeSize = sizeInBytes(type); 4104 unsigned int typeSize = sizeInBytes(type);
4105 if (!typeSize) { 4105 if (!typeSize) {
4106 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "vertexAttribPointer" , "invalid type"); 4106 synthesizeGLError(GL_INVALID_ENUM, "vertexAttribPointer", "invalid type" );
4107 return; 4107 return;
4108 } 4108 }
4109 if ((stride % typeSize) || (static_cast<GC3Dintptr>(offset) % typeSize)) { 4109 if ((stride % typeSize) || (static_cast<GC3Dintptr>(offset) % typeSize)) {
4110 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "vertexAttribPoi nter", "stride or offset not valid for type"); 4110 synthesizeGLError(GL_INVALID_OPERATION, "vertexAttribPointer", "stride o r offset not valid for type");
4111 return; 4111 return;
4112 } 4112 }
4113 GC3Dsizei bytesPerElement = size * typeSize; 4113 GC3Dsizei bytesPerElement = size * typeSize;
4114 4114
4115 m_boundVertexArrayObject->setVertexAttribState(index, bytesPerElement, size, type, normalized, stride, static_cast<GC3Dintptr>(offset), m_boundArrayBuffer); 4115 m_boundVertexArrayObject->setVertexAttribState(index, bytesPerElement, size, type, normalized, stride, static_cast<GC3Dintptr>(offset), m_boundArrayBuffer);
4116 m_context->vertexAttribPointer(index, size, type, normalized, stride, static _cast<GC3Dintptr>(offset)); 4116 m_context->vertexAttribPointer(index, size, type, normalized, stride, static _cast<GC3Dintptr>(offset));
4117 } 4117 }
4118 4118
4119 void WebGLRenderingContext::vertexAttribDivisorANGLE(GC3Duint index, GC3Duint di visor) 4119 void WebGLRenderingContext::vertexAttribDivisorANGLE(GC3Duint index, GC3Duint di visor)
4120 { 4120 {
4121 if (isContextLost()) 4121 if (isContextLost())
4122 return; 4122 return;
4123 4123
4124 if (index >= m_maxVertexAttribs) { 4124 if (index >= m_maxVertexAttribs) {
4125 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "vertexAttribDivisor ANGLE", "index out of range"); 4125 synthesizeGLError(GL_INVALID_VALUE, "vertexAttribDivisorANGLE", "index o ut of range");
4126 return; 4126 return;
4127 } 4127 }
4128 4128
4129 m_boundVertexArrayObject->setVertexAttribDivisor(index, divisor); 4129 m_boundVertexArrayObject->setVertexAttribDivisor(index, divisor);
4130 m_context->extensions()->vertexAttribDivisorANGLE(index, divisor); 4130 m_context->extensions()->vertexAttribDivisorANGLE(index, divisor);
4131 } 4131 }
4132 4132
4133 void WebGLRenderingContext::viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3D sizei height) 4133 void WebGLRenderingContext::viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3D sizei height)
4134 { 4134 {
4135 if (isContextLost()) 4135 if (isContextLost())
4136 return; 4136 return;
4137 if (!validateSize("viewport", width, height)) 4137 if (!validateSize("viewport", width, height))
4138 return; 4138 return;
4139 m_context->viewport(x, y, width, height); 4139 m_context->viewport(x, y, width, height);
4140 } 4140 }
4141 4141
4142 void WebGLRenderingContext::forceLostContext(WebGLRenderingContext::LostContextM ode mode) 4142 void WebGLRenderingContext::forceLostContext(WebGLRenderingContext::LostContextM ode mode)
4143 { 4143 {
4144 if (isContextLost()) { 4144 if (isContextLost()) {
4145 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "loseContext", " context already lost"); 4145 synthesizeGLError(GL_INVALID_OPERATION, "loseContext", "context already lost");
4146 return; 4146 return;
4147 } 4147 }
4148 4148
4149 m_contextGroup->loseContextGroup(mode); 4149 m_contextGroup->loseContextGroup(mode);
4150 } 4150 }
4151 4151
4152 void WebGLRenderingContext::loseContextImpl(WebGLRenderingContext::LostContextMo de mode) 4152 void WebGLRenderingContext::loseContextImpl(WebGLRenderingContext::LostContextMo de mode)
4153 { 4153 {
4154 if (isContextLost()) 4154 if (isContextLost())
4155 return; 4155 return;
(...skipping 19 matching lines...) Expand all
4175 ExtensionTracker* tracker = m_extensions[i]; 4175 ExtensionTracker* tracker = m_extensions[i];
4176 tracker->loseExtension(); 4176 tracker->loseExtension();
4177 } 4177 }
4178 4178
4179 removeAllCompressedTextureFormats(); 4179 removeAllCompressedTextureFormats();
4180 4180
4181 if (mode != RealLostContext) 4181 if (mode != RealLostContext)
4182 destroyGraphicsContext3D(); 4182 destroyGraphicsContext3D();
4183 4183
4184 ConsoleDisplayPreference display = (mode == RealLostContext) ? DisplayInCons ole: DontDisplayInConsole; 4184 ConsoleDisplayPreference display = (mode == RealLostContext) ? DisplayInCons ole: DontDisplayInConsole;
4185 synthesizeGLError(GraphicsContext3D::CONTEXT_LOST_WEBGL, "loseContext", "con text lost", display); 4185 synthesizeGLError(GC3D_CONTEXT_LOST_WEBGL, "loseContext", "context lost", di splay);
4186 4186
4187 // Don't allow restoration unless the context lost event has both been 4187 // Don't allow restoration unless the context lost event has both been
4188 // dispatched and its default behavior prevented. 4188 // dispatched and its default behavior prevented.
4189 m_restoreAllowed = false; 4189 m_restoreAllowed = false;
4190 4190
4191 // Always defer the dispatch of the context lost event, to implement 4191 // Always defer the dispatch of the context lost event, to implement
4192 // the spec behavior of queueing a task. 4192 // the spec behavior of queueing a task.
4193 m_dispatchContextLostEventTimer.startOneShot(0); 4193 m_dispatchContextLostEventTimer.startOneShot(0);
4194 } 4194 }
4195 4195
4196 void WebGLRenderingContext::forceRestoreContext() 4196 void WebGLRenderingContext::forceRestoreContext()
4197 { 4197 {
4198 if (!isContextLost()) { 4198 if (!isContextLost()) {
4199 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "restoreContext" , "context not lost"); 4199 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context not l ost");
4200 return; 4200 return;
4201 } 4201 }
4202 4202
4203 if (!m_restoreAllowed) { 4203 if (!m_restoreAllowed) {
4204 if (m_contextLostMode == SyntheticLostContext) 4204 if (m_contextLostMode == SyntheticLostContext)
4205 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "restoreCont ext", "context restoration not allowed"); 4205 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context r estoration not allowed");
4206 return; 4206 return;
4207 } 4207 }
4208 4208
4209 if (!m_restoreTimer.isActive()) 4209 if (!m_restoreTimer.isActive())
4210 m_restoreTimer.startOneShot(0); 4210 m_restoreTimer.startOneShot(0);
4211 } 4211 }
4212 4212
4213 blink::WebLayer* WebGLRenderingContext::platformLayer() const 4213 blink::WebLayer* WebGLRenderingContext::platformLayer() const
4214 { 4214 {
4215 return m_drawingBuffer->platformLayer(); 4215 return m_drawingBuffer->platformLayer();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4261 WebGLGetInfo WebGLRenderingContext::getBooleanParameter(GC3Denum pname) 4261 WebGLGetInfo WebGLRenderingContext::getBooleanParameter(GC3Denum pname)
4262 { 4262 {
4263 GC3Dboolean value = 0; 4263 GC3Dboolean value = 0;
4264 if (!isContextLost()) 4264 if (!isContextLost())
4265 m_context->getBooleanv(pname, &value); 4265 m_context->getBooleanv(pname, &value);
4266 return WebGLGetInfo(static_cast<bool>(value)); 4266 return WebGLGetInfo(static_cast<bool>(value));
4267 } 4267 }
4268 4268
4269 WebGLGetInfo WebGLRenderingContext::getBooleanArrayParameter(GC3Denum pname) 4269 WebGLGetInfo WebGLRenderingContext::getBooleanArrayParameter(GC3Denum pname)
4270 { 4270 {
4271 if (pname != GraphicsContext3D::COLOR_WRITEMASK) { 4271 if (pname != GL_COLOR_WRITEMASK) {
4272 notImplemented(); 4272 notImplemented();
4273 return WebGLGetInfo(0, 0); 4273 return WebGLGetInfo(0, 0);
4274 } 4274 }
4275 GC3Dboolean value[4] = {0}; 4275 GC3Dboolean value[4] = {0};
4276 if (!isContextLost()) 4276 if (!isContextLost())
4277 m_context->getBooleanv(pname, value); 4277 m_context->getBooleanv(pname, value);
4278 bool boolValue[4]; 4278 bool boolValue[4];
4279 for (int ii = 0; ii < 4; ++ii) 4279 for (int ii = 0; ii < 4; ++ii)
4280 boolValue[ii] = static_cast<bool>(value[ii]); 4280 boolValue[ii] = static_cast<bool>(value[ii]);
4281 return WebGLGetInfo(boolValue, 4); 4281 return WebGLGetInfo(boolValue, 4);
(...skipping 23 matching lines...) Expand all
4305 return WebGLGetInfo(static_cast<unsigned int>(value)); 4305 return WebGLGetInfo(static_cast<unsigned int>(value));
4306 } 4306 }
4307 4307
4308 WebGLGetInfo WebGLRenderingContext::getWebGLFloatArrayParameter(GC3Denum pname) 4308 WebGLGetInfo WebGLRenderingContext::getWebGLFloatArrayParameter(GC3Denum pname)
4309 { 4309 {
4310 GC3Dfloat value[4] = {0}; 4310 GC3Dfloat value[4] = {0};
4311 if (!isContextLost()) 4311 if (!isContextLost())
4312 m_context->getFloatv(pname, value); 4312 m_context->getFloatv(pname, value);
4313 unsigned length = 0; 4313 unsigned length = 0;
4314 switch (pname) { 4314 switch (pname) {
4315 case GraphicsContext3D::ALIASED_POINT_SIZE_RANGE: 4315 case GL_ALIASED_POINT_SIZE_RANGE:
4316 case GraphicsContext3D::ALIASED_LINE_WIDTH_RANGE: 4316 case GL_ALIASED_LINE_WIDTH_RANGE:
4317 case GraphicsContext3D::DEPTH_RANGE: 4317 case GL_DEPTH_RANGE:
4318 length = 2; 4318 length = 2;
4319 break; 4319 break;
4320 case GraphicsContext3D::BLEND_COLOR: 4320 case GL_BLEND_COLOR:
4321 case GraphicsContext3D::COLOR_CLEAR_VALUE: 4321 case GL_COLOR_CLEAR_VALUE:
4322 length = 4; 4322 length = 4;
4323 break; 4323 break;
4324 default: 4324 default:
4325 notImplemented(); 4325 notImplemented();
4326 } 4326 }
4327 return WebGLGetInfo(Float32Array::create(value, length)); 4327 return WebGLGetInfo(Float32Array::create(value, length));
4328 } 4328 }
4329 4329
4330 WebGLGetInfo WebGLRenderingContext::getWebGLIntArrayParameter(GC3Denum pname) 4330 WebGLGetInfo WebGLRenderingContext::getWebGLIntArrayParameter(GC3Denum pname)
4331 { 4331 {
4332 GC3Dint value[4] = {0}; 4332 GC3Dint value[4] = {0};
4333 if (!isContextLost()) 4333 if (!isContextLost())
4334 m_context->getIntegerv(pname, value); 4334 m_context->getIntegerv(pname, value);
4335 unsigned length = 0; 4335 unsigned length = 0;
4336 switch (pname) { 4336 switch (pname) {
4337 case GraphicsContext3D::MAX_VIEWPORT_DIMS: 4337 case GL_MAX_VIEWPORT_DIMS:
4338 length = 2; 4338 length = 2;
4339 break; 4339 break;
4340 case GraphicsContext3D::SCISSOR_BOX: 4340 case GL_SCISSOR_BOX:
4341 case GraphicsContext3D::VIEWPORT: 4341 case GL_VIEWPORT:
4342 length = 4; 4342 length = 4;
4343 break; 4343 break;
4344 default: 4344 default:
4345 notImplemented(); 4345 notImplemented();
4346 } 4346 }
4347 return WebGLGetInfo(Int32Array::create(value, length)); 4347 return WebGLGetInfo(Int32Array::create(value, length));
4348 } 4348 }
4349 4349
4350 void WebGLRenderingContext::handleTextureCompleteness(const char* functionName, bool prepareToDraw) 4350 void WebGLRenderingContext::handleTextureCompleteness(const char* functionName, bool prepareToDraw)
4351 { 4351 {
(...skipping 18 matching lines...) Expand all
4370 + " is not renderable. It maybe non-power-of-2 and have inco mpatible texture filtering or is not 'texture complete'." 4370 + " is not renderable. It maybe non-power-of-2 and have inco mpatible texture filtering or is not 'texture complete'."
4371 + " Or the texture is Float or Half Float type with linear f iltering while OES_float_linear or OES_half_float_linear extension is not enable d."); 4371 + " Or the texture is Float or Half Float type with linear f iltering while OES_float_linear or OES_half_float_linear extension is not enable d.");
4372 emitGLWarning(functionName, msg.utf8().data()); 4372 emitGLWarning(functionName, msg.utf8().data());
4373 tex2D = m_blackTexture2D.get(); 4373 tex2D = m_blackTexture2D.get();
4374 texCubeMap = m_blackTextureCubeMap.get(); 4374 texCubeMap = m_blackTextureCubeMap.get();
4375 } else { 4375 } else {
4376 tex2D = m_textureUnits[ii].m_texture2DBinding.get(); 4376 tex2D = m_textureUnits[ii].m_texture2DBinding.get();
4377 texCubeMap = m_textureUnits[ii].m_textureCubeMapBinding.get(); 4377 texCubeMap = m_textureUnits[ii].m_textureCubeMapBinding.get();
4378 } 4378 }
4379 if (m_textureUnits[ii].m_texture2DBinding && m_textureUnits[ii].m_te xture2DBinding->needToUseBlackTexture(flag)) 4379 if (m_textureUnits[ii].m_texture2DBinding && m_textureUnits[ii].m_te xture2DBinding->needToUseBlackTexture(flag))
4380 m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, objectOrZe ro(tex2D)); 4380 m_context->bindTexture(GL_TEXTURE_2D, objectOrZero(tex2D));
4381 if (m_textureUnits[ii].m_textureCubeMapBinding && m_textureUnits[ii] .m_textureCubeMapBinding->needToUseBlackTexture(flag)) 4381 if (m_textureUnits[ii].m_textureCubeMapBinding && m_textureUnits[ii] .m_textureCubeMapBinding->needToUseBlackTexture(flag))
4382 m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, obje ctOrZero(texCubeMap)); 4382 m_context->bindTexture(GL_TEXTURE_CUBE_MAP, objectOrZero(texCube Map));
4383 } 4383 }
4384 } 4384 }
4385 if (resetActiveUnit) 4385 if (resetActiveUnit)
4386 m_context->activeTexture(m_activeTextureUnit); 4386 m_context->activeTexture(m_activeTextureUnit);
4387 } 4387 }
4388 4388
4389 void WebGLRenderingContext::createFallbackBlackTextures1x1() 4389 void WebGLRenderingContext::createFallbackBlackTextures1x1()
4390 { 4390 {
4391 // All calling functions check isContextLost, so a duplicate check is not ne eded here. 4391 // All calling functions check isContextLost, so a duplicate check is not ne eded here.
4392 unsigned char black[] = {0, 0, 0, 255}; 4392 unsigned char black[] = {0, 0, 0, 255};
4393 m_blackTexture2D = createTexture(); 4393 m_blackTexture2D = createTexture();
4394 m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_blackTexture2D->obje ct()); 4394 m_context->bindTexture(GL_TEXTURE_2D, m_blackTexture2D->object());
4395 m_context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::R GBA, 1, 1, 4395 m_context->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1,
4396 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4396 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4397 m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0); 4397 m_context->bindTexture(GL_TEXTURE_2D, 0);
4398 m_blackTextureCubeMap = createTexture(); 4398 m_blackTextureCubeMap = createTexture();
4399 m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, m_blackTextureCu beMap->object()); 4399 m_context->bindTexture(GL_TEXTURE_CUBE_MAP, m_blackTextureCubeMap->object()) ;
4400 m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_X, 0, Gra phicsContext3D::RGBA, 1, 1, 4400 m_context->texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 1, 1,
4401 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4401 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4402 m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_X, 0, Gra phicsContext3D::RGBA, 1, 1, 4402 m_context->texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, 1, 1,
4403 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4403 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4404 m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Y, 0, Gra phicsContext3D::RGBA, 1, 1, 4404 m_context->texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, 1, 1,
4405 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4405 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4406 m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, Gra phicsContext3D::RGBA, 1, 1, 4406 m_context->texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, 1, 1,
4407 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4407 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4408 m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Z, 0, Gra phicsContext3D::RGBA, 1, 1, 4408 m_context->texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, 1, 1,
4409 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4409 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4410 m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, Gra phicsContext3D::RGBA, 1, 1, 4410 m_context->texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, 1, 1,
4411 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNE D_BYTE, black); 4411 0, GL_RGBA, GL_UNSIGNED_BYTE, black);
4412 m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, 0); 4412 m_context->bindTexture(GL_TEXTURE_CUBE_MAP, 0);
4413 } 4413 }
4414 4414
4415 bool WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid(GC3De num texInternalFormat, 4415 bool WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid(GC3De num texInternalFormat,
4416 GC3De num colorBufferFormat) 4416 GC3De num colorBufferFormat)
4417 { 4417 {
4418 unsigned need = GraphicsContext3D::getChannelBitsByFormat(texInternalFormat) ; 4418 unsigned need = GraphicsContext3D::getChannelBitsByFormat(texInternalFormat) ;
4419 unsigned have = GraphicsContext3D::getChannelBitsByFormat(colorBufferFormat) ; 4419 unsigned have = GraphicsContext3D::getChannelBitsByFormat(colorBufferFormat) ;
4420 return (need & have) == need; 4420 return (need & have) == need;
4421 } 4421 }
4422 4422
4423 GC3Denum WebGLRenderingContext::boundFramebufferColorFormat() 4423 GC3Denum WebGLRenderingContext::boundFramebufferColorFormat()
4424 { 4424 {
4425 if (m_framebufferBinding && m_framebufferBinding->object()) 4425 if (m_framebufferBinding && m_framebufferBinding->object())
4426 return m_framebufferBinding->colorBufferFormat(); 4426 return m_framebufferBinding->colorBufferFormat();
4427 if (m_attributes.alpha) 4427 if (m_attributes.alpha)
4428 return GraphicsContext3D::RGBA; 4428 return GL_RGBA;
4429 return GraphicsContext3D::RGB; 4429 return GL_RGB;
4430 } 4430 }
4431 4431
4432 int WebGLRenderingContext::boundFramebufferWidth() 4432 int WebGLRenderingContext::boundFramebufferWidth()
4433 { 4433 {
4434 if (m_framebufferBinding && m_framebufferBinding->object()) 4434 if (m_framebufferBinding && m_framebufferBinding->object())
4435 return m_framebufferBinding->colorBufferWidth(); 4435 return m_framebufferBinding->colorBufferWidth();
4436 return m_drawingBuffer->size().width(); 4436 return m_drawingBuffer->size().width();
4437 } 4437 }
4438 4438
4439 int WebGLRenderingContext::boundFramebufferHeight() 4439 int WebGLRenderingContext::boundFramebufferHeight()
4440 { 4440 {
4441 if (m_framebufferBinding && m_framebufferBinding->object()) 4441 if (m_framebufferBinding && m_framebufferBinding->object())
4442 return m_framebufferBinding->colorBufferHeight(); 4442 return m_framebufferBinding->colorBufferHeight();
4443 return m_drawingBuffer->size().height(); 4443 return m_drawingBuffer->size().height();
4444 } 4444 }
4445 4445
4446 WebGLTexture* WebGLRenderingContext::validateTextureBinding(const char* function Name, GC3Denum target, bool useSixEnumsForCubeMap) 4446 WebGLTexture* WebGLRenderingContext::validateTextureBinding(const char* function Name, GC3Denum target, bool useSixEnumsForCubeMap)
4447 { 4447 {
4448 WebGLTexture* tex = 0; 4448 WebGLTexture* tex = 0;
4449 switch (target) { 4449 switch (target) {
4450 case GraphicsContext3D::TEXTURE_2D: 4450 case GL_TEXTURE_2D:
4451 tex = m_textureUnits[m_activeTextureUnit].m_texture2DBinding.get(); 4451 tex = m_textureUnits[m_activeTextureUnit].m_texture2DBinding.get();
4452 break; 4452 break;
4453 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_X: 4453 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
4454 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_X: 4454 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
4455 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Y: 4455 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
4456 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Y: 4456 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
4457 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Z: 4457 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
4458 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Z: 4458 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
4459 if (!useSixEnumsForCubeMap) { 4459 if (!useSixEnumsForCubeMap) {
4460 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "in valid texture target"); 4460 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture ta rget");
4461 return 0; 4461 return 0;
4462 } 4462 }
4463 tex = m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding.get(); 4463 tex = m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding.get();
4464 break; 4464 break;
4465 case GraphicsContext3D::TEXTURE_CUBE_MAP: 4465 case GL_TEXTURE_CUBE_MAP:
4466 if (useSixEnumsForCubeMap) { 4466 if (useSixEnumsForCubeMap) {
4467 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "in valid texture target"); 4467 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture ta rget");
4468 return 0; 4468 return 0;
4469 } 4469 }
4470 tex = m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding.get(); 4470 tex = m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding.get();
4471 break; 4471 break;
4472 default: 4472 default:
4473 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d texture target"); 4473 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture target ");
4474 return 0; 4474 return 0;
4475 } 4475 }
4476 if (!tex) 4476 if (!tex)
4477 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "n o texture"); 4477 synthesizeGLError(GL_INVALID_OPERATION, functionName, "no texture");
4478 return tex; 4478 return tex;
4479 } 4479 }
4480 4480
4481 bool WebGLRenderingContext::validateLocationLength(const char* functionName, con st String& string) 4481 bool WebGLRenderingContext::validateLocationLength(const char* functionName, con st String& string)
4482 { 4482 {
4483 const unsigned maxWebGLLocationLength = 256; 4483 const unsigned maxWebGLLocationLength = 256;
4484 if (string.length() > maxWebGLLocationLength) { 4484 if (string.length() > maxWebGLLocationLength) {
4485 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "locat ion length > 256"); 4485 synthesizeGLError(GL_INVALID_VALUE, functionName, "location length > 256 ");
4486 return false; 4486 return false;
4487 } 4487 }
4488 return true; 4488 return true;
4489 } 4489 }
4490 4490
4491 bool WebGLRenderingContext::validateSize(const char* functionName, GC3Dint x, GC 3Dint y) 4491 bool WebGLRenderingContext::validateSize(const char* functionName, GC3Dint x, GC 3Dint y)
4492 { 4492 {
4493 if (x < 0 || y < 0) { 4493 if (x < 0 || y < 0) {
4494 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "size < 0"); 4494 synthesizeGLError(GL_INVALID_VALUE, functionName, "size < 0");
4495 return false; 4495 return false;
4496 } 4496 }
4497 return true; 4497 return true;
4498 } 4498 }
4499 4499
4500 bool WebGLRenderingContext::validateString(const char* functionName, const Strin g& string) 4500 bool WebGLRenderingContext::validateString(const char* functionName, const Strin g& string)
4501 { 4501 {
4502 for (size_t i = 0; i < string.length(); ++i) { 4502 for (size_t i = 0; i < string.length(); ++i) {
4503 if (!validateCharacter(string[i])) { 4503 if (!validateCharacter(string[i])) {
4504 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "s tring not ASCII"); 4504 synthesizeGLError(GL_INVALID_VALUE, functionName, "string not ASCII" );
4505 return false; 4505 return false;
4506 } 4506 }
4507 } 4507 }
4508 return true; 4508 return true;
4509 } 4509 }
4510 4510
4511 bool WebGLRenderingContext::validateTexFuncFormatAndType(const char* functionNam e, GC3Denum format, GC3Denum type, GC3Dint level) 4511 bool WebGLRenderingContext::validateTexFuncFormatAndType(const char* functionNam e, GC3Denum format, GC3Denum type, GC3Dint level)
4512 { 4512 {
4513 switch (format) { 4513 switch (format) {
4514 case GraphicsContext3D::ALPHA: 4514 case GL_ALPHA:
4515 case GraphicsContext3D::LUMINANCE: 4515 case GL_LUMINANCE:
4516 case GraphicsContext3D::LUMINANCE_ALPHA: 4516 case GL_LUMINANCE_ALPHA:
4517 case GraphicsContext3D::RGB: 4517 case GL_RGB:
4518 case GraphicsContext3D::RGBA: 4518 case GL_RGBA:
4519 break; 4519 break;
4520 case GraphicsContext3D::DEPTH_STENCIL: 4520 case GL_DEPTH_STENCIL_OES:
4521 case GraphicsContext3D::DEPTH_COMPONENT: 4521 case GL_DEPTH_COMPONENT:
4522 if (m_webglDepthTexture) 4522 if (m_webglDepthTexture)
4523 break; 4523 break;
4524 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "depth texture formats not enabled"); 4524 synthesizeGLError(GL_INVALID_ENUM, functionName, "depth texture formats not enabled");
4525 return false; 4525 return false;
4526 default: 4526 default:
4527 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d texture format"); 4527 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture format ");
4528 return false; 4528 return false;
4529 } 4529 }
4530 4530
4531 switch (type) { 4531 switch (type) {
4532 case GraphicsContext3D::UNSIGNED_BYTE: 4532 case GL_UNSIGNED_BYTE:
4533 case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: 4533 case GL_UNSIGNED_SHORT_5_6_5:
4534 case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: 4534 case GL_UNSIGNED_SHORT_4_4_4_4:
4535 case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: 4535 case GL_UNSIGNED_SHORT_5_5_5_1:
4536 break; 4536 break;
4537 case GraphicsContext3D::FLOAT: 4537 case GL_FLOAT:
4538 if (m_oesTextureFloat) 4538 if (m_oesTextureFloat)
4539 break; 4539 break;
4540 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d texture type"); 4540 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture type") ;
4541 return false; 4541 return false;
4542 case GraphicsContext3D::HALF_FLOAT_OES: 4542 case GL_HALF_FLOAT_OES:
4543 if (m_oesTextureHalfFloat) 4543 if (m_oesTextureHalfFloat)
4544 break; 4544 break;
4545 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d texture type"); 4545 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture type") ;
4546 return false; 4546 return false;
4547 case GraphicsContext3D::UNSIGNED_INT: 4547 case GL_UNSIGNED_INT:
4548 case GraphicsContext3D::UNSIGNED_INT_24_8: 4548 case GL_UNSIGNED_INT_24_8_OES:
4549 case GraphicsContext3D::UNSIGNED_SHORT: 4549 case GL_UNSIGNED_SHORT:
4550 if (m_webglDepthTexture) 4550 if (m_webglDepthTexture)
4551 break; 4551 break;
4552 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d texture type"); 4552 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture type") ;
4553 return false; 4553 return false;
4554 default: 4554 default:
4555 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d texture type"); 4555 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid texture type") ;
4556 return false; 4556 return false;
4557 } 4557 }
4558 4558
4559 // Verify that the combination of format and type is supported. 4559 // Verify that the combination of format and type is supported.
4560 switch (format) { 4560 switch (format) {
4561 case GraphicsContext3D::ALPHA: 4561 case GL_ALPHA:
4562 case GraphicsContext3D::LUMINANCE: 4562 case GL_LUMINANCE:
4563 case GraphicsContext3D::LUMINANCE_ALPHA: 4563 case GL_LUMINANCE_ALPHA:
4564 if (type != GraphicsContext3D::UNSIGNED_BYTE 4564 if (type != GL_UNSIGNED_BYTE
4565 && type != GraphicsContext3D::FLOAT 4565 && type != GL_FLOAT
4566 && type != GraphicsContext3D::HALF_FLOAT_OES) { 4566 && type != GL_HALF_FLOAT_OES) {
4567 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "invalid type for format"); 4567 synthesizeGLError(GL_INVALID_OPERATION, functionName, "invalid type for format");
4568 return false; 4568 return false;
4569 } 4569 }
4570 break; 4570 break;
4571 case GraphicsContext3D::RGB: 4571 case GL_RGB:
4572 if (type != GraphicsContext3D::UNSIGNED_BYTE 4572 if (type != GL_UNSIGNED_BYTE
4573 && type != GraphicsContext3D::UNSIGNED_SHORT_5_6_5 4573 && type != GL_UNSIGNED_SHORT_5_6_5
4574 && type != GraphicsContext3D::FLOAT 4574 && type != GL_FLOAT
4575 && type != GraphicsContext3D::HALF_FLOAT_OES) { 4575 && type != GL_HALF_FLOAT_OES) {
4576 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "invalid type for RGB format"); 4576 synthesizeGLError(GL_INVALID_OPERATION, functionName, "invalid type for RGB format");
4577 return false; 4577 return false;
4578 } 4578 }
4579 break; 4579 break;
4580 case GraphicsContext3D::RGBA: 4580 case GL_RGBA:
4581 if (type != GraphicsContext3D::UNSIGNED_BYTE 4581 if (type != GL_UNSIGNED_BYTE
4582 && type != GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4 4582 && type != GL_UNSIGNED_SHORT_4_4_4_4
4583 && type != GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1 4583 && type != GL_UNSIGNED_SHORT_5_5_5_1
4584 && type != GraphicsContext3D::FLOAT 4584 && type != GL_FLOAT
4585 && type != GraphicsContext3D::HALF_FLOAT_OES) { 4585 && type != GL_HALF_FLOAT_OES) {
4586 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "invalid type for RGBA format"); 4586 synthesizeGLError(GL_INVALID_OPERATION, functionName, "invalid type for RGBA format");
4587 return false; 4587 return false;
4588 } 4588 }
4589 break; 4589 break;
4590 case GraphicsContext3D::DEPTH_COMPONENT: 4590 case GL_DEPTH_COMPONENT:
4591 if (!m_webglDepthTexture) { 4591 if (!m_webglDepthTexture) {
4592 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "in valid format. DEPTH_COMPONENT not enabled"); 4592 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid format. DE PTH_COMPONENT not enabled");
4593 return false; 4593 return false;
4594 } 4594 }
4595 if (type != GraphicsContext3D::UNSIGNED_SHORT 4595 if (type != GL_UNSIGNED_SHORT
4596 && type != GraphicsContext3D::UNSIGNED_INT) { 4596 && type != GL_UNSIGNED_INT) {
4597 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "invalid type for DEPTH_COMPONENT format"); 4597 synthesizeGLError(GL_INVALID_OPERATION, functionName, "invalid type for DEPTH_COMPONENT format");
4598 return false; 4598 return false;
4599 } 4599 }
4600 if (level > 0) { 4600 if (level > 0) {
4601 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "level must be 0 for DEPTH_COMPONENT format"); 4601 synthesizeGLError(GL_INVALID_OPERATION, functionName, "level must be 0 for DEPTH_COMPONENT format");
4602 return false; 4602 return false;
4603 } 4603 }
4604 break; 4604 break;
4605 case GraphicsContext3D::DEPTH_STENCIL: 4605 case GL_DEPTH_STENCIL_OES:
4606 if (!m_webglDepthTexture) { 4606 if (!m_webglDepthTexture) {
4607 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "in valid format. DEPTH_STENCIL not enabled"); 4607 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid format. DE PTH_STENCIL not enabled");
4608 return false; 4608 return false;
4609 } 4609 }
4610 if (type != GraphicsContext3D::UNSIGNED_INT_24_8) { 4610 if (type != GL_UNSIGNED_INT_24_8_OES) {
4611 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "invalid type for DEPTH_STENCIL format"); 4611 synthesizeGLError(GL_INVALID_OPERATION, functionName, "invalid type for DEPTH_STENCIL format");
4612 return false; 4612 return false;
4613 } 4613 }
4614 if (level > 0) { 4614 if (level > 0) {
4615 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "level must be 0 for DEPTH_STENCIL format"); 4615 synthesizeGLError(GL_INVALID_OPERATION, functionName, "level must be 0 for DEPTH_STENCIL format");
4616 return false; 4616 return false;
4617 } 4617 }
4618 break; 4618 break;
4619 default: 4619 default:
4620 ASSERT_NOT_REACHED(); 4620 ASSERT_NOT_REACHED();
4621 } 4621 }
4622 4622
4623 return true; 4623 return true;
4624 } 4624 }
4625 4625
4626 bool WebGLRenderingContext::validateTexFuncLevel(const char* functionName, GC3De num target, GC3Dint level) 4626 bool WebGLRenderingContext::validateTexFuncLevel(const char* functionName, GC3De num target, GC3Dint level)
4627 { 4627 {
4628 if (level < 0) { 4628 if (level < 0) {
4629 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "level < 0"); 4629 synthesizeGLError(GL_INVALID_VALUE, functionName, "level < 0");
4630 return false; 4630 return false;
4631 } 4631 }
4632 switch (target) { 4632 switch (target) {
4633 case GraphicsContext3D::TEXTURE_2D: 4633 case GL_TEXTURE_2D:
4634 if (level >= m_maxTextureLevel) { 4634 if (level >= m_maxTextureLevel) {
4635 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "l evel out of range"); 4635 synthesizeGLError(GL_INVALID_VALUE, functionName, "level out of rang e");
4636 return false; 4636 return false;
4637 } 4637 }
4638 break; 4638 break;
4639 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_X: 4639 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
4640 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_X: 4640 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
4641 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Y: 4641 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
4642 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Y: 4642 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
4643 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Z: 4643 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
4644 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Z: 4644 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
4645 if (level >= m_maxCubeMapTextureLevel) { 4645 if (level >= m_maxCubeMapTextureLevel) {
4646 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "l evel out of range"); 4646 synthesizeGLError(GL_INVALID_VALUE, functionName, "level out of rang e");
4647 return false; 4647 return false;
4648 } 4648 }
4649 break; 4649 break;
4650 } 4650 }
4651 // This function only checks if level is legal, so we return true and don't 4651 // This function only checks if level is legal, so we return true and don't
4652 // generate INVALID_ENUM if target is illegal. 4652 // generate INVALID_ENUM if target is illegal.
4653 return true; 4653 return true;
4654 } 4654 }
4655 4655
4656 bool WebGLRenderingContext::validateTexFuncDimensions(const char* functionName, TexFuncValidationFunctionType functionType, 4656 bool WebGLRenderingContext::validateTexFuncDimensions(const char* functionName, TexFuncValidationFunctionType functionType,
4657 GC3Denum target, GC3Dint level, GC3Dsizei width, GC3Dsizei height) 4657 GC3Denum target, GC3Dint level, GC3Dsizei width, GC3Dsizei height)
4658 { 4658 {
4659 if (width < 0 || height < 0) { 4659 if (width < 0 || height < 0) {
4660 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "width or height < 0"); 4660 synthesizeGLError(GL_INVALID_VALUE, functionName, "width or height < 0") ;
4661 return false; 4661 return false;
4662 } 4662 }
4663 4663
4664 switch (target) { 4664 switch (target) {
4665 case GraphicsContext3D::TEXTURE_2D: 4665 case GL_TEXTURE_2D:
4666 if (width > (m_maxTextureSize >> level) || height > (m_maxTextureSize >> level)) { 4666 if (width > (m_maxTextureSize >> level) || height > (m_maxTextureSize >> level)) {
4667 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "w idth or height out of range"); 4667 synthesizeGLError(GL_INVALID_VALUE, functionName, "width or height o ut of range");
4668 return false; 4668 return false;
4669 } 4669 }
4670 break; 4670 break;
4671 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_X: 4671 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
4672 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_X: 4672 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
4673 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Y: 4673 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
4674 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Y: 4674 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
4675 case GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_Z: 4675 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
4676 case GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_Z: 4676 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
4677 if (functionType != TexSubImage2D && width != height) { 4677 if (functionType != TexSubImage2D && width != height) {
4678 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "wid th != height for cube map"); 4678 synthesizeGLError(GL_INVALID_VALUE, functionName, "width != height f or cube map");
4679 return false; 4679 return false;
4680 } 4680 }
4681 // No need to check height here. For texImage width == height. 4681 // No need to check height here. For texImage width == height.
4682 // For texSubImage that will be checked when checking yoffset + height i s in range. 4682 // For texSubImage that will be checked when checking yoffset + height i s in range.
4683 if (width > (m_maxCubeMapTextureSize >> level)) { 4683 if (width > (m_maxCubeMapTextureSize >> level)) {
4684 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "w idth or height out of range for cube map"); 4684 synthesizeGLError(GL_INVALID_VALUE, functionName, "width or height o ut of range for cube map");
4685 return false; 4685 return false;
4686 } 4686 }
4687 break; 4687 break;
4688 default: 4688 default:
4689 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d target"); 4689 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target");
4690 return false; 4690 return false;
4691 } 4691 }
4692 return true; 4692 return true;
4693 } 4693 }
4694 4694
4695 bool WebGLRenderingContext::validateTexFuncParameters(const char* functionName, TexFuncValidationFunctionType functionType, GC3Denum target, 4695 bool WebGLRenderingContext::validateTexFuncParameters(const char* functionName, TexFuncValidationFunctionType functionType, GC3Denum target,
4696 GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, G C3Dint border, GC3Denum format, GC3Denum type) 4696 GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, G C3Dint border, GC3Denum format, GC3Denum type)
4697 { 4697 {
4698 // We absolutely have to validate the format and type combination. 4698 // We absolutely have to validate the format and type combination.
4699 // The texImage2D entry points taking HTMLImage, etc. will produce 4699 // The texImage2D entry points taking HTMLImage, etc. will produce
4700 // temporary data based on this combination, so it must be legal. 4700 // temporary data based on this combination, so it must be legal.
4701 if (!validateTexFuncFormatAndType(functionName, format, type, level) || !val idateTexFuncLevel(functionName, target, level)) 4701 if (!validateTexFuncFormatAndType(functionName, format, type, level) || !val idateTexFuncLevel(functionName, target, level))
4702 return false; 4702 return false;
4703 4703
4704 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi dth, height)) 4704 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi dth, height))
4705 return false; 4705 return false;
4706 4706
4707 if (format != internalformat) { 4707 if (format != internalformat) {
4708 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "f ormat != internalformat"); 4708 synthesizeGLError(GL_INVALID_OPERATION, functionName, "format != interna lformat");
4709 return false; 4709 return false;
4710 } 4710 }
4711 4711
4712 if (border) { 4712 if (border) {
4713 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "borde r != 0"); 4713 synthesizeGLError(GL_INVALID_VALUE, functionName, "border != 0");
4714 return false; 4714 return false;
4715 } 4715 }
4716 4716
4717 return true; 4717 return true;
4718 } 4718 }
4719 4719
4720 bool WebGLRenderingContext::validateTexFuncData(const char* functionName, GC3Din t level, 4720 bool WebGLRenderingContext::validateTexFuncData(const char* functionName, GC3Din t level,
4721 GC3Dsizei width, GC3Dsizei heigh t, 4721 GC3Dsizei width, GC3Dsizei heigh t,
4722 GC3Denum format, GC3Denum type, 4722 GC3Denum format, GC3Denum type,
4723 ArrayBufferView* pixels, 4723 ArrayBufferView* pixels,
4724 NullDisposition disposition) 4724 NullDisposition disposition)
4725 { 4725 {
4726 // All calling functions check isContextLost, so a duplicate check is not ne eded here. 4726 // All calling functions check isContextLost, so a duplicate check is not ne eded here.
4727 if (!pixels) { 4727 if (!pixels) {
4728 if (disposition == NullAllowed) 4728 if (disposition == NullAllowed)
4729 return true; 4729 return true;
4730 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no pi xels"); 4730 synthesizeGLError(GL_INVALID_VALUE, functionName, "no pixels");
4731 return false; 4731 return false;
4732 } 4732 }
4733 4733
4734 if (!validateTexFuncFormatAndType(functionName, format, type, level)) 4734 if (!validateTexFuncFormatAndType(functionName, format, type, level))
4735 return false; 4735 return false;
4736 if (!validateSettableTexFormat(functionName, format)) 4736 if (!validateSettableTexFormat(functionName, format))
4737 return false; 4737 return false;
4738 4738
4739 switch (type) { 4739 switch (type) {
4740 case GraphicsContext3D::UNSIGNED_BYTE: 4740 case GL_UNSIGNED_BYTE:
4741 if (pixels->getType() != ArrayBufferView::TypeUint8) { 4741 if (pixels->getType() != ArrayBufferView::TypeUint8) {
4742 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "type UNSIGNED_BYTE but ArrayBufferView not Uint8Array"); 4742 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type UNSIGNED _BYTE but ArrayBufferView not Uint8Array");
4743 return false; 4743 return false;
4744 } 4744 }
4745 break; 4745 break;
4746 case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: 4746 case GL_UNSIGNED_SHORT_5_6_5:
4747 case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: 4747 case GL_UNSIGNED_SHORT_4_4_4_4:
4748 case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: 4748 case GL_UNSIGNED_SHORT_5_5_5_1:
4749 if (pixels->getType() != ArrayBufferView::TypeUint16) { 4749 if (pixels->getType() != ArrayBufferView::TypeUint16) {
4750 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "type UNSIGNED_SHORT but ArrayBufferView not Uint16Array"); 4750 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type UNSIGNED _SHORT but ArrayBufferView not Uint16Array");
4751 return false; 4751 return false;
4752 } 4752 }
4753 break; 4753 break;
4754 case GraphicsContext3D::FLOAT: // OES_texture_float 4754 case GL_FLOAT: // OES_texture_float
4755 if (pixels->getType() != ArrayBufferView::TypeFloat32) { 4755 if (pixels->getType() != ArrayBufferView::TypeFloat32) {
4756 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "type FLOAT but ArrayBufferView not Float32Array"); 4756 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type FLOAT bu t ArrayBufferView not Float32Array");
4757 return false; 4757 return false;
4758 } 4758 }
4759 break; 4759 break;
4760 case GraphicsContext3D::HALF_FLOAT_OES: // OES_texture_half_float 4760 case GL_HALF_FLOAT_OES: // OES_texture_half_float
4761 // As per the specification, ArrayBufferView should be null when 4761 // As per the specification, ArrayBufferView should be null when
4762 // OES_texture_half_float is enabled. 4762 // OES_texture_half_float is enabled.
4763 if (pixels) { 4763 if (pixels) {
4764 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "type HALF_FLOAT_OES but ArrayBufferView is not NULL"); 4764 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type HALF_FLO AT_OES but ArrayBufferView is not NULL");
4765 return false; 4765 return false;
4766 } 4766 }
4767 break; 4767 break;
4768 default: 4768 default:
4769 ASSERT_NOT_REACHED(); 4769 ASSERT_NOT_REACHED();
4770 } 4770 }
4771 4771
4772 unsigned int totalBytesRequired; 4772 unsigned int totalBytesRequired;
4773 GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, hei ght, m_unpackAlignment, &totalBytesRequired, 0); 4773 GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, hei ght, m_unpackAlignment, &totalBytesRequired, 0);
4774 if (error != GraphicsContext3D::NO_ERROR) { 4774 if (error != GL_NO_ERROR) {
4775 synthesizeGLError(error, functionName, "invalid texture dimensions"); 4775 synthesizeGLError(error, functionName, "invalid texture dimensions");
4776 return false; 4776 return false;
4777 } 4777 }
4778 if (pixels->byteLength() < totalBytesRequired) { 4778 if (pixels->byteLength() < totalBytesRequired) {
4779 if (m_unpackAlignment != 1) { 4779 if (m_unpackAlignment != 1) {
4780 error = m_context->computeImageSizeInBytes(format, type, width, height , 1, &totalBytesRequired, 0); 4780 error = m_context->computeImageSizeInBytes(format, type, width, height , 1, &totalBytesRequired, 0);
4781 if (pixels->byteLength() == totalBytesRequired) { 4781 if (pixels->byteLength() == totalBytesRequired) {
4782 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "ArrayBufferView not big enough for request with UNPACK_ALIGNMENT > 1"); 4782 synthesizeGLError(GL_INVALID_OPERATION, functionName, "ArrayBufferVi ew not big enough for request with UNPACK_ALIGNMENT > 1");
4783 return false; 4783 return false;
4784 } 4784 }
4785 } 4785 }
4786 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "A rrayBufferView not big enough for request"); 4786 synthesizeGLError(GL_INVALID_OPERATION, functionName, "ArrayBufferView n ot big enough for request");
4787 return false; 4787 return false;
4788 } 4788 }
4789 return true; 4789 return true;
4790 } 4790 }
4791 4791
4792 bool WebGLRenderingContext::validateCompressedTexFormat(GC3Denum format) 4792 bool WebGLRenderingContext::validateCompressedTexFormat(GC3Denum format)
4793 { 4793 {
4794 return m_compressedTextureFormats.contains(format); 4794 return m_compressedTextureFormats.contains(format);
4795 } 4795 }
4796 4796
4797 bool WebGLRenderingContext::validateCompressedTexFuncData(const char* functionNa me, 4797 bool WebGLRenderingContext::validateCompressedTexFuncData(const char* functionNa me,
4798 GC3Dsizei width, GC3Ds izei height, 4798 GC3Dsizei width, GC3Ds izei height,
4799 GC3Denum format, Array BufferView* pixels) 4799 GC3Denum format, Array BufferView* pixels)
4800 { 4800 {
4801 if (!pixels) { 4801 if (!pixels) {
4802 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no pi xels"); 4802 synthesizeGLError(GL_INVALID_VALUE, functionName, "no pixels");
4803 return false; 4803 return false;
4804 } 4804 }
4805 if (width < 0 || height < 0) { 4805 if (width < 0 || height < 0) {
4806 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "width or height < 0"); 4806 synthesizeGLError(GL_INVALID_VALUE, functionName, "width or height < 0") ;
4807 return false; 4807 return false;
4808 } 4808 }
4809 4809
4810 unsigned int bytesRequired = 0; 4810 unsigned int bytesRequired = 0;
4811 4811
4812 switch (format) { 4812 switch (format) {
4813 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT: 4813 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT:
4814 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT: 4814 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT:
4815 { 4815 {
4816 const int kBlockWidth = 4; 4816 const int kBlockWidth = 4;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
4850 bytesRequired = max(width, 8) * max(height, 8) / 2; 4850 bytesRequired = max(width, 8) * max(height, 8) / 2;
4851 } 4851 }
4852 break; 4852 break;
4853 case Extensions3D::COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 4853 case Extensions3D::COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
4854 case Extensions3D::COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 4854 case Extensions3D::COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
4855 { 4855 {
4856 bytesRequired = max(width, 8) * max(height, 8) / 4; 4856 bytesRequired = max(width, 8) * max(height, 8) / 4;
4857 } 4857 }
4858 break; 4858 break;
4859 default: 4859 default:
4860 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d format"); 4860 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid format");
4861 return false; 4861 return false;
4862 } 4862 }
4863 4863
4864 if (pixels->byteLength() != bytesRequired) { 4864 if (pixels->byteLength() != bytesRequired) {
4865 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "lengt h of ArrayBufferView is not correct for dimensions"); 4865 synthesizeGLError(GL_INVALID_VALUE, functionName, "length of ArrayBuffer View is not correct for dimensions");
4866 return false; 4866 return false;
4867 } 4867 }
4868 4868
4869 return true; 4869 return true;
4870 } 4870 }
4871 4871
4872 bool WebGLRenderingContext::validateCompressedTexDimensions(const char* function Name, TexFuncValidationFunctionType functionType, GC3Denum target, GC3Dint level , GC3Dsizei width, GC3Dsizei height, GC3Denum format) 4872 bool WebGLRenderingContext::validateCompressedTexDimensions(const char* function Name, TexFuncValidationFunctionType functionType, GC3Denum target, GC3Dint level , GC3Dsizei width, GC3Dsizei height, GC3Denum format)
4873 { 4873 {
4874 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi dth, height)) 4874 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi dth, height))
4875 return false; 4875 return false;
4876 4876
4877 switch (format) { 4877 switch (format) {
4878 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT: 4878 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT:
4879 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT: 4879 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT:
4880 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT: 4880 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT:
4881 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: { 4881 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: {
4882 const int kBlockWidth = 4; 4882 const int kBlockWidth = 4;
4883 const int kBlockHeight = 4; 4883 const int kBlockHeight = 4;
4884 bool widthValid = (level && width == 1) || (level && width == 2) || !(wi dth % kBlockWidth); 4884 bool widthValid = (level && width == 1) || (level && width == 2) || !(wi dth % kBlockWidth);
4885 bool heightValid = (level && height == 1) || (level && height == 2) || ! (height % kBlockHeight); 4885 bool heightValid = (level && height == 1) || (level && height == 2) || ! (height % kBlockHeight);
4886 if (!widthValid || !heightValid) { 4886 if (!widthValid || !heightValid) {
4887 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "width or height invalid for level"); 4887 synthesizeGLError(GL_INVALID_OPERATION, functionName, "width or heig ht invalid for level");
4888 return false; 4888 return false;
4889 } 4889 }
4890 return true; 4890 return true;
4891 } 4891 }
4892 default: 4892 default:
4893 return false; 4893 return false;
4894 } 4894 }
4895 } 4895 }
4896 4896
4897 bool WebGLRenderingContext::validateCompressedTexSubDimensions(const char* funct ionName, GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, 4897 bool WebGLRenderingContext::validateCompressedTexSubDimensions(const char* funct ionName, GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
4898 GC3Dsizei width, GC3Dsizei height, GC3Denum format, WebGLTexture* tex) 4898 GC3Dsizei width, GC3Dsizei height, GC3Denum format, WebGLTexture* tex)
4899 { 4899 {
4900 if (xoffset < 0 || yoffset < 0) { 4900 if (xoffset < 0 || yoffset < 0) {
4901 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "xoffset or yoffset < 0"); 4901 synthesizeGLError(GL_INVALID_VALUE, functionName, "xoffset or yoffset < 0");
4902 return false; 4902 return false;
4903 } 4903 }
4904 4904
4905 switch (format) { 4905 switch (format) {
4906 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT: 4906 case Extensions3D::COMPRESSED_RGB_S3TC_DXT1_EXT:
4907 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT: 4907 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT1_EXT:
4908 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT: 4908 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT3_EXT:
4909 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: { 4909 case Extensions3D::COMPRESSED_RGBA_S3TC_DXT5_EXT: {
4910 const int kBlockWidth = 4; 4910 const int kBlockWidth = 4;
4911 const int kBlockHeight = 4; 4911 const int kBlockHeight = 4;
4912 if ((xoffset % kBlockWidth) || (yoffset % kBlockHeight)) { 4912 if ((xoffset % kBlockWidth) || (yoffset % kBlockHeight)) {
4913 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "xoffset or yoffset not multiple of 4"); 4913 synthesizeGLError(GL_INVALID_OPERATION, functionName, "xoffset or yo ffset not multiple of 4");
4914 return false; 4914 return false;
4915 } 4915 }
4916 if (width - xoffset > tex->getWidth(target, level) 4916 if (width - xoffset > tex->getWidth(target, level)
4917 || height - yoffset > tex->getHeight(target, level)) { 4917 || height - yoffset > tex->getHeight(target, level)) {
4918 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName , "dimensions out of range"); 4918 synthesizeGLError(GL_INVALID_OPERATION, functionName, "dimensions ou t of range");
4919 return false; 4919 return false;
4920 } 4920 }
4921 return validateCompressedTexDimensions(functionName, TexSubImage2D, targ et, level, width, height, format); 4921 return validateCompressedTexDimensions(functionName, TexSubImage2D, targ et, level, width, height, format);
4922 } 4922 }
4923 default: 4923 default:
4924 return false; 4924 return false;
4925 } 4925 }
4926 } 4926 }
4927 4927
4928 bool WebGLRenderingContext::validateDrawMode(const char* functionName, GC3Denum mode) 4928 bool WebGLRenderingContext::validateDrawMode(const char* functionName, GC3Denum mode)
4929 { 4929 {
4930 switch (mode) { 4930 switch (mode) {
4931 case GraphicsContext3D::POINTS: 4931 case GL_POINTS:
4932 case GraphicsContext3D::LINE_STRIP: 4932 case GL_LINE_STRIP:
4933 case GraphicsContext3D::LINE_LOOP: 4933 case GL_LINE_LOOP:
4934 case GraphicsContext3D::LINES: 4934 case GL_LINES:
4935 case GraphicsContext3D::TRIANGLE_STRIP: 4935 case GL_TRIANGLE_STRIP:
4936 case GraphicsContext3D::TRIANGLE_FAN: 4936 case GL_TRIANGLE_FAN:
4937 case GraphicsContext3D::TRIANGLES: 4937 case GL_TRIANGLES:
4938 return true; 4938 return true;
4939 default: 4939 default:
4940 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d draw mode"); 4940 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid draw mode");
4941 return false; 4941 return false;
4942 } 4942 }
4943 } 4943 }
4944 4944
4945 bool WebGLRenderingContext::validateStencilSettings(const char* functionName) 4945 bool WebGLRenderingContext::validateStencilSettings(const char* functionName)
4946 { 4946 {
4947 if (m_stencilMask != m_stencilMaskBack || m_stencilFuncRef != m_stencilFuncR efBack || m_stencilFuncMask != m_stencilFuncMaskBack) { 4947 if (m_stencilMask != m_stencilMaskBack || m_stencilFuncRef != m_stencilFuncR efBack || m_stencilFuncMask != m_stencilFuncMaskBack) {
4948 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "f ront and back stencils settings do not match"); 4948 synthesizeGLError(GL_INVALID_OPERATION, functionName, "front and back st encils settings do not match");
4949 return false; 4949 return false;
4950 } 4950 }
4951 return true; 4951 return true;
4952 } 4952 }
4953 4953
4954 bool WebGLRenderingContext::validateStencilOrDepthFunc(const char* functionName, GC3Denum func) 4954 bool WebGLRenderingContext::validateStencilOrDepthFunc(const char* functionName, GC3Denum func)
4955 { 4955 {
4956 switch (func) { 4956 switch (func) {
4957 case GraphicsContext3D::NEVER: 4957 case GL_NEVER:
4958 case GraphicsContext3D::LESS: 4958 case GL_LESS:
4959 case GraphicsContext3D::LEQUAL: 4959 case GL_LEQUAL:
4960 case GraphicsContext3D::GREATER: 4960 case GL_GREATER:
4961 case GraphicsContext3D::GEQUAL: 4961 case GL_GEQUAL:
4962 case GraphicsContext3D::EQUAL: 4962 case GL_EQUAL:
4963 case GraphicsContext3D::NOTEQUAL: 4963 case GL_NOTEQUAL:
4964 case GraphicsContext3D::ALWAYS: 4964 case GL_ALWAYS:
4965 return true; 4965 return true;
4966 default: 4966 default:
4967 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d function"); 4967 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid function");
4968 return false; 4968 return false;
4969 } 4969 }
4970 } 4970 }
4971 4971
4972 void WebGLRenderingContext::printGLErrorToConsole(const String& message) 4972 void WebGLRenderingContext::printGLErrorToConsole(const String& message)
4973 { 4973 {
4974 if (!m_numGLErrorsToConsoleAllowed) 4974 if (!m_numGLErrorsToConsoleAllowed)
4975 return; 4975 return;
4976 4976
4977 --m_numGLErrorsToConsoleAllowed; 4977 --m_numGLErrorsToConsoleAllowed;
4978 printWarningToConsole(message); 4978 printWarningToConsole(message);
4979 4979
4980 if (!m_numGLErrorsToConsoleAllowed) 4980 if (!m_numGLErrorsToConsoleAllowed)
4981 printWarningToConsole("WebGL: too many errors, no more errors will be re ported to the console for this context."); 4981 printWarningToConsole("WebGL: too many errors, no more errors will be re ported to the console for this context.");
4982 4982
4983 return; 4983 return;
4984 } 4984 }
4985 4985
4986 void WebGLRenderingContext::printWarningToConsole(const String& message) 4986 void WebGLRenderingContext::printWarningToConsole(const String& message)
4987 { 4987 {
4988 if (!canvas()) 4988 if (!canvas())
4989 return; 4989 return;
4990 canvas()->document().addConsoleMessage(RenderingMessageSource, WarningMessag eLevel, message); 4990 canvas()->document().addConsoleMessage(RenderingMessageSource, WarningMessag eLevel, message);
4991 } 4991 }
4992 4992
4993 bool WebGLRenderingContext::validateFramebufferFuncParameters(const char* functi onName, GC3Denum target, GC3Denum attachment) 4993 bool WebGLRenderingContext::validateFramebufferFuncParameters(const char* functi onName, GC3Denum target, GC3Denum attachment)
4994 { 4994 {
4995 if (target != GraphicsContext3D::FRAMEBUFFER) { 4995 if (target != GL_FRAMEBUFFER) {
4996 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d target"); 4996 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target");
4997 return false; 4997 return false;
4998 } 4998 }
4999 switch (attachment) { 4999 switch (attachment) {
5000 case GraphicsContext3D::COLOR_ATTACHMENT0: 5000 case GL_COLOR_ATTACHMENT0:
5001 case GraphicsContext3D::DEPTH_ATTACHMENT: 5001 case GL_DEPTH_ATTACHMENT:
5002 case GraphicsContext3D::STENCIL_ATTACHMENT: 5002 case GL_STENCIL_ATTACHMENT:
5003 case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT: 5003 case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL:
5004 break; 5004 break;
5005 default: 5005 default:
5006 if (m_webglDrawBuffers 5006 if (m_webglDrawBuffers
5007 && attachment > GraphicsContext3D::COLOR_ATTACHMENT0 5007 && attachment > GL_COLOR_ATTACHMENT0
5008 && attachment < static_cast<GC3Denum>(GraphicsContext3D::COLOR_ATTAC HMENT0 + maxColorAttachments())) 5008 && attachment < static_cast<GC3Denum>(GL_COLOR_ATTACHMENT0 + maxColo rAttachments()))
5009 break; 5009 break;
5010 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d attachment"); 5010 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid attachment");
5011 return false; 5011 return false;
5012 } 5012 }
5013 return true; 5013 return true;
5014 } 5014 }
5015 5015
5016 bool WebGLRenderingContext::validateBlendEquation(const char* functionName, GC3D enum mode) 5016 bool WebGLRenderingContext::validateBlendEquation(const char* functionName, GC3D enum mode)
5017 { 5017 {
5018 switch (mode) { 5018 switch (mode) {
5019 case GraphicsContext3D::FUNC_ADD: 5019 case GL_FUNC_ADD:
5020 case GraphicsContext3D::FUNC_SUBTRACT: 5020 case GL_FUNC_SUBTRACT:
5021 case GraphicsContext3D::FUNC_REVERSE_SUBTRACT: 5021 case GL_FUNC_REVERSE_SUBTRACT:
5022 return true; 5022 return true;
5023 default: 5023 default:
5024 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d mode"); 5024 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid mode");
5025 return false; 5025 return false;
5026 } 5026 }
5027 } 5027 }
5028 5028
5029 bool WebGLRenderingContext::validateBlendFuncFactors(const char* functionName, G C3Denum src, GC3Denum dst) 5029 bool WebGLRenderingContext::validateBlendFuncFactors(const char* functionName, G C3Denum src, GC3Denum dst)
5030 { 5030 {
5031 if (((src == GraphicsContext3D::CONSTANT_COLOR || src == GraphicsContext3D:: ONE_MINUS_CONSTANT_COLOR) 5031 if (((src == GL_CONSTANT_COLOR || src == GL_ONE_MINUS_CONSTANT_COLOR)
5032 && (dst == GraphicsContext3D::CONSTANT_ALPHA || dst == GraphicsContext3 D::ONE_MINUS_CONSTANT_ALPHA)) 5032 && (dst == GL_CONSTANT_ALPHA || dst == GL_ONE_MINUS_CONSTANT_ALPHA))
5033 || ((dst == GraphicsContext3D::CONSTANT_COLOR || dst == GraphicsContext3 D::ONE_MINUS_CONSTANT_COLOR) 5033 || ((dst == GL_CONSTANT_COLOR || dst == GL_ONE_MINUS_CONSTANT_COLOR)
5034 && (src == GraphicsContext3D::CONSTANT_ALPHA || src == GraphicsConte xt3D::ONE_MINUS_CONSTANT_ALPHA))) { 5034 && (src == GL_CONSTANT_ALPHA || src == GL_ONE_MINUS_CONSTANT_ALPHA))) {
5035 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "i ncompatible src and dst"); 5035 synthesizeGLError(GL_INVALID_OPERATION, functionName, "incompatible src and dst");
5036 return false; 5036 return false;
5037 } 5037 }
5038 return true; 5038 return true;
5039 } 5039 }
5040 5040
5041 bool WebGLRenderingContext::validateCapability(const char* functionName, GC3Denu m cap) 5041 bool WebGLRenderingContext::validateCapability(const char* functionName, GC3Denu m cap)
5042 { 5042 {
5043 switch (cap) { 5043 switch (cap) {
5044 case GraphicsContext3D::BLEND: 5044 case GL_BLEND:
5045 case GraphicsContext3D::CULL_FACE: 5045 case GL_CULL_FACE:
5046 case GraphicsContext3D::DEPTH_TEST: 5046 case GL_DEPTH_TEST:
5047 case GraphicsContext3D::DITHER: 5047 case GL_DITHER:
5048 case GraphicsContext3D::POLYGON_OFFSET_FILL: 5048 case GL_POLYGON_OFFSET_FILL:
5049 case GraphicsContext3D::SAMPLE_ALPHA_TO_COVERAGE: 5049 case GL_SAMPLE_ALPHA_TO_COVERAGE:
5050 case GraphicsContext3D::SAMPLE_COVERAGE: 5050 case GL_SAMPLE_COVERAGE:
5051 case GraphicsContext3D::SCISSOR_TEST: 5051 case GL_SCISSOR_TEST:
5052 case GraphicsContext3D::STENCIL_TEST: 5052 case GL_STENCIL_TEST:
5053 return true; 5053 return true;
5054 default: 5054 default:
5055 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d capability"); 5055 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid capability");
5056 return false; 5056 return false;
5057 } 5057 }
5058 } 5058 }
5059 5059
5060 bool WebGLRenderingContext::validateUniformParameters(const char* functionName, const WebGLUniformLocation* location, Float32Array* v, GC3Dsizei requiredMinSize ) 5060 bool WebGLRenderingContext::validateUniformParameters(const char* functionName, const WebGLUniformLocation* location, Float32Array* v, GC3Dsizei requiredMinSize )
5061 { 5061 {
5062 if (!v) { 5062 if (!v) {
5063 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ar ray"); 5063 synthesizeGLError(GL_INVALID_VALUE, functionName, "no array");
5064 return false; 5064 return false;
5065 } 5065 }
5066 return validateUniformMatrixParameters(functionName, location, false, v->dat a(), v->length(), requiredMinSize); 5066 return validateUniformMatrixParameters(functionName, location, false, v->dat a(), v->length(), requiredMinSize);
5067 } 5067 }
5068 5068
5069 bool WebGLRenderingContext::validateUniformParameters(const char* functionName, const WebGLUniformLocation* location, Int32Array* v, GC3Dsizei requiredMinSize) 5069 bool WebGLRenderingContext::validateUniformParameters(const char* functionName, const WebGLUniformLocation* location, Int32Array* v, GC3Dsizei requiredMinSize)
5070 { 5070 {
5071 if (!v) { 5071 if (!v) {
5072 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ar ray"); 5072 synthesizeGLError(GL_INVALID_VALUE, functionName, "no array");
5073 return false; 5073 return false;
5074 } 5074 }
5075 return validateUniformMatrixParameters(functionName, location, false, v->dat a(), v->length(), requiredMinSize); 5075 return validateUniformMatrixParameters(functionName, location, false, v->dat a(), v->length(), requiredMinSize);
5076 } 5076 }
5077 5077
5078 bool WebGLRenderingContext::validateUniformParameters(const char* functionName, const WebGLUniformLocation* location, void* v, GC3Dsizei size, GC3Dsizei require dMinSize) 5078 bool WebGLRenderingContext::validateUniformParameters(const char* functionName, const WebGLUniformLocation* location, void* v, GC3Dsizei size, GC3Dsizei require dMinSize)
5079 { 5079 {
5080 return validateUniformMatrixParameters(functionName, location, false, v, siz e, requiredMinSize); 5080 return validateUniformMatrixParameters(functionName, location, false, v, siz e, requiredMinSize);
5081 } 5081 }
5082 5082
5083 bool WebGLRenderingContext::validateUniformMatrixParameters(const char* function Name, const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, GC3Dsizei requiredMinSize) 5083 bool WebGLRenderingContext::validateUniformMatrixParameters(const char* function Name, const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, GC3Dsizei requiredMinSize)
5084 { 5084 {
5085 if (!v) { 5085 if (!v) {
5086 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ar ray"); 5086 synthesizeGLError(GL_INVALID_VALUE, functionName, "no array");
5087 return false; 5087 return false;
5088 } 5088 }
5089 return validateUniformMatrixParameters(functionName, location, transpose, v- >data(), v->length(), requiredMinSize); 5089 return validateUniformMatrixParameters(functionName, location, transpose, v- >data(), v->length(), requiredMinSize);
5090 } 5090 }
5091 5091
5092 bool WebGLRenderingContext::validateUniformMatrixParameters(const char* function Name, const WebGLUniformLocation* location, GC3Dboolean transpose, void* v, GC3D sizei size, GC3Dsizei requiredMinSize) 5092 bool WebGLRenderingContext::validateUniformMatrixParameters(const char* function Name, const WebGLUniformLocation* location, GC3Dboolean transpose, void* v, GC3D sizei size, GC3Dsizei requiredMinSize)
5093 { 5093 {
5094 if (!location) 5094 if (!location)
5095 return false; 5095 return false;
5096 if (location->program() != m_currentProgram) { 5096 if (location->program() != m_currentProgram) {
5097 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "l ocation is not from current program"); 5097 synthesizeGLError(GL_INVALID_OPERATION, functionName, "location is not f rom current program");
5098 return false; 5098 return false;
5099 } 5099 }
5100 if (!v) { 5100 if (!v) {
5101 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ar ray"); 5101 synthesizeGLError(GL_INVALID_VALUE, functionName, "no array");
5102 return false; 5102 return false;
5103 } 5103 }
5104 if (transpose) { 5104 if (transpose) {
5105 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "trans pose not FALSE"); 5105 synthesizeGLError(GL_INVALID_VALUE, functionName, "transpose not FALSE") ;
5106 return false; 5106 return false;
5107 } 5107 }
5108 if (size < requiredMinSize || (size % requiredMinSize)) { 5108 if (size < requiredMinSize || (size % requiredMinSize)) {
5109 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "inval id size"); 5109 synthesizeGLError(GL_INVALID_VALUE, functionName, "invalid size");
5110 return false; 5110 return false;
5111 } 5111 }
5112 return true; 5112 return true;
5113 } 5113 }
5114 5114
5115 WebGLBuffer* WebGLRenderingContext::validateBufferDataParameters(const char* fun ctionName, GC3Denum target, GC3Denum usage) 5115 WebGLBuffer* WebGLRenderingContext::validateBufferDataParameters(const char* fun ctionName, GC3Denum target, GC3Denum usage)
5116 { 5116 {
5117 WebGLBuffer* buffer = 0; 5117 WebGLBuffer* buffer = 0;
5118 switch (target) { 5118 switch (target) {
5119 case GraphicsContext3D::ELEMENT_ARRAY_BUFFER: 5119 case GL_ELEMENT_ARRAY_BUFFER:
5120 buffer = m_boundVertexArrayObject->boundElementArrayBuffer().get(); 5120 buffer = m_boundVertexArrayObject->boundElementArrayBuffer().get();
5121 break; 5121 break;
5122 case GraphicsContext3D::ARRAY_BUFFER: 5122 case GL_ARRAY_BUFFER:
5123 buffer = m_boundArrayBuffer.get(); 5123 buffer = m_boundArrayBuffer.get();
5124 break; 5124 break;
5125 default: 5125 default:
5126 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d target"); 5126 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target");
5127 return 0; 5127 return 0;
5128 } 5128 }
5129 if (!buffer) { 5129 if (!buffer) {
5130 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "n o buffer"); 5130 synthesizeGLError(GL_INVALID_OPERATION, functionName, "no buffer");
5131 return 0; 5131 return 0;
5132 } 5132 }
5133 switch (usage) { 5133 switch (usage) {
5134 case GraphicsContext3D::STREAM_DRAW: 5134 case GL_STREAM_DRAW:
5135 case GraphicsContext3D::STATIC_DRAW: 5135 case GL_STATIC_DRAW:
5136 case GraphicsContext3D::DYNAMIC_DRAW: 5136 case GL_DYNAMIC_DRAW:
5137 return buffer; 5137 return buffer;
5138 } 5138 }
5139 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invalid us age"); 5139 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid usage");
5140 return 0; 5140 return 0;
5141 } 5141 }
5142 5142
5143 bool WebGLRenderingContext::validateHTMLImageElement(const char* functionName, H TMLImageElement* image, ExceptionState& exceptionState) 5143 bool WebGLRenderingContext::validateHTMLImageElement(const char* functionName, H TMLImageElement* image, ExceptionState& exceptionState)
5144 { 5144 {
5145 if (!image || !image->cachedImage()) { 5145 if (!image || !image->cachedImage()) {
5146 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no im age"); 5146 synthesizeGLError(GL_INVALID_VALUE, functionName, "no image");
5147 return false; 5147 return false;
5148 } 5148 }
5149 const KURL& url = image->cachedImage()->response().url(); 5149 const KURL& url = image->cachedImage()->response().url();
5150 if (url.isNull() || url.isEmpty() || !url.isValid()) { 5150 if (url.isNull() || url.isEmpty() || !url.isValid()) {
5151 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "inval id image"); 5151 synthesizeGLError(GL_INVALID_VALUE, functionName, "invalid image");
5152 return false; 5152 return false;
5153 } 5153 }
5154 if (wouldTaintOrigin(image)) { 5154 if (wouldTaintOrigin(image)) {
5155 exceptionState.throwSecurityError("The cross-origin image at " + url.eli dedString() + " may not be loaded."); 5155 exceptionState.throwSecurityError("The cross-origin image at " + url.eli dedString() + " may not be loaded.");
5156 return false; 5156 return false;
5157 } 5157 }
5158 return true; 5158 return true;
5159 } 5159 }
5160 5160
5161 bool WebGLRenderingContext::validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement* canvas, ExceptionState& exceptionState) 5161 bool WebGLRenderingContext::validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement* canvas, ExceptionState& exceptionState)
5162 { 5162 {
5163 if (!canvas || !canvas->buffer()) { 5163 if (!canvas || !canvas->buffer()) {
5164 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ca nvas"); 5164 synthesizeGLError(GL_INVALID_VALUE, functionName, "no canvas");
5165 return false; 5165 return false;
5166 } 5166 }
5167 if (wouldTaintOrigin(canvas)) { 5167 if (wouldTaintOrigin(canvas)) {
5168 exceptionState.throwSecurityError("Tainted canvases may not be loaded.") ; 5168 exceptionState.throwSecurityError("Tainted canvases may not be loaded.") ;
5169 return false; 5169 return false;
5170 } 5170 }
5171 return true; 5171 return true;
5172 } 5172 }
5173 5173
5174 bool WebGLRenderingContext::validateHTMLVideoElement(const char* functionName, H TMLVideoElement* video, ExceptionState& exceptionState) 5174 bool WebGLRenderingContext::validateHTMLVideoElement(const char* functionName, H TMLVideoElement* video, ExceptionState& exceptionState)
5175 { 5175 {
5176 if (!video || !video->videoWidth() || !video->videoHeight()) { 5176 if (!video || !video->videoWidth() || !video->videoHeight()) {
5177 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no vi deo"); 5177 synthesizeGLError(GL_INVALID_VALUE, functionName, "no video");
5178 return false; 5178 return false;
5179 } 5179 }
5180 if (wouldTaintOrigin(video)) { 5180 if (wouldTaintOrigin(video)) {
5181 exceptionState.throwSecurityError("The video element contains cross-orig in data, and may not be loaded."); 5181 exceptionState.throwSecurityError("The video element contains cross-orig in data, and may not be loaded.");
5182 return false; 5182 return false;
5183 } 5183 }
5184 return true; 5184 return true;
5185 } 5185 }
5186 5186
5187 bool WebGLRenderingContext::validateDrawArrays(const char* functionName, GC3Denu m mode, GC3Dint first, GC3Dsizei count) 5187 bool WebGLRenderingContext::validateDrawArrays(const char* functionName, GC3Denu m mode, GC3Dint first, GC3Dsizei count)
5188 { 5188 {
5189 if (isContextLost() || !validateDrawMode(functionName, mode)) 5189 if (isContextLost() || !validateDrawMode(functionName, mode))
5190 return false; 5190 return false;
5191 5191
5192 if (!validateStencilSettings(functionName)) 5192 if (!validateStencilSettings(functionName))
5193 return false; 5193 return false;
5194 5194
5195 if (first < 0 || count < 0) { 5195 if (first < 0 || count < 0) {
5196 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "first or count < 0"); 5196 synthesizeGLError(GL_INVALID_VALUE, functionName, "first or count < 0");
5197 return false; 5197 return false;
5198 } 5198 }
5199 5199
5200 if (!count) { 5200 if (!count) {
5201 markContextChanged(); 5201 markContextChanged();
5202 return false; 5202 return false;
5203 } 5203 }
5204 5204
5205 if (!validateRenderingState()) { 5205 if (!validateRenderingState()) {
5206 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "a ttribs not setup correctly"); 5206 synthesizeGLError(GL_INVALID_OPERATION, functionName, "attribs not setup correctly");
5207 return false; 5207 return false;
5208 } 5208 }
5209 5209
5210 const char* reason = "framebuffer incomplete"; 5210 const char* reason = "framebuffer incomplete";
5211 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) { 5211 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) {
5212 synthesizeGLError(GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION, func tionName, reason); 5212 synthesizeGLError(GL_INVALID_FRAMEBUFFER_OPERATION, functionName, reason );
5213 return false; 5213 return false;
5214 } 5214 }
5215 5215
5216 return true; 5216 return true;
5217 } 5217 }
5218 5218
5219 bool WebGLRenderingContext::validateDrawElements(const char* functionName, GC3De num mode, GC3Dsizei count, GC3Denum type, long long offset) 5219 bool WebGLRenderingContext::validateDrawElements(const char* functionName, GC3De num mode, GC3Dsizei count, GC3Denum type, long long offset)
5220 { 5220 {
5221 if (isContextLost() || !validateDrawMode(functionName, mode)) 5221 if (isContextLost() || !validateDrawMode(functionName, mode))
5222 return false; 5222 return false;
5223 5223
5224 if (!validateStencilSettings(functionName)) 5224 if (!validateStencilSettings(functionName))
5225 return false; 5225 return false;
5226 5226
5227 switch (type) { 5227 switch (type) {
5228 case GraphicsContext3D::UNSIGNED_BYTE: 5228 case GL_UNSIGNED_BYTE:
5229 case GraphicsContext3D::UNSIGNED_SHORT: 5229 case GL_UNSIGNED_SHORT:
5230 break; 5230 break;
5231 case GraphicsContext3D::UNSIGNED_INT: 5231 case GL_UNSIGNED_INT:
5232 if (m_oesElementIndexUint) 5232 if (m_oesElementIndexUint)
5233 break; 5233 break;
5234 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d type"); 5234 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid type");
5235 return false; 5235 return false;
5236 default: 5236 default:
5237 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invali d type"); 5237 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid type");
5238 return false; 5238 return false;
5239 } 5239 }
5240 5240
5241 if (count < 0 || offset < 0) { 5241 if (count < 0 || offset < 0) {
5242 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "count or offset < 0"); 5242 synthesizeGLError(GL_INVALID_VALUE, functionName, "count or offset < 0") ;
5243 return false; 5243 return false;
5244 } 5244 }
5245 5245
5246 if (!count) { 5246 if (!count) {
5247 markContextChanged(); 5247 markContextChanged();
5248 return false; 5248 return false;
5249 } 5249 }
5250 5250
5251 if (!m_boundVertexArrayObject->boundElementArrayBuffer()) { 5251 if (!m_boundVertexArrayObject->boundElementArrayBuffer()) {
5252 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "n o ELEMENT_ARRAY_BUFFER bound"); 5252 synthesizeGLError(GL_INVALID_OPERATION, functionName, "no ELEMENT_ARRAY_ BUFFER bound");
5253 return false; 5253 return false;
5254 } 5254 }
5255 5255
5256 if (!validateRenderingState()) { 5256 if (!validateRenderingState()) {
5257 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "a ttribs not setup correctly"); 5257 synthesizeGLError(GL_INVALID_OPERATION, functionName, "attribs not setup correctly");
5258 return false; 5258 return false;
5259 } 5259 }
5260 5260
5261 const char* reason = "framebuffer incomplete"; 5261 const char* reason = "framebuffer incomplete";
5262 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) { 5262 if (m_framebufferBinding && !m_framebufferBinding->onAccess(graphicsContext3 D(), &reason)) {
5263 synthesizeGLError(GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION, func tionName, reason); 5263 synthesizeGLError(GL_INVALID_FRAMEBUFFER_OPERATION, functionName, reason );
5264 return false; 5264 return false;
5265 } 5265 }
5266 5266
5267 return true; 5267 return true;
5268 } 5268 }
5269 5269
5270 // Helper function to validate draw*Instanced calls 5270 // Helper function to validate draw*Instanced calls
5271 bool WebGLRenderingContext::validateDrawInstanced(const char* functionName, GC3D sizei primcount) 5271 bool WebGLRenderingContext::validateDrawInstanced(const char* functionName, GC3D sizei primcount)
5272 { 5272 {
5273 if (primcount < 0) { 5273 if (primcount < 0) {
5274 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "primc ount < 0"); 5274 synthesizeGLError(GL_INVALID_VALUE, functionName, "primcount < 0");
5275 return false; 5275 return false;
5276 } 5276 }
5277 5277
5278 // Ensure at least one enabled vertex attrib has a divisor of 0. 5278 // Ensure at least one enabled vertex attrib has a divisor of 0.
5279 for (unsigned i = 0; i < m_onePlusMaxEnabledAttribIndex; ++i) { 5279 for (unsigned i = 0; i < m_onePlusMaxEnabledAttribIndex; ++i) {
5280 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVerte xArrayObject->getVertexAttribState(i); 5280 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVerte xArrayObject->getVertexAttribState(i);
5281 if (state.enabled && !state.divisor) 5281 if (state.enabled && !state.divisor)
5282 return true; 5282 return true;
5283 } 5283 }
5284 5284
5285 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, functionName, "at le ast one enabled attribute must have a divisor of 0"); 5285 synthesizeGLError(GL_INVALID_OPERATION, functionName, "at least one enabled attribute must have a divisor of 0");
5286 return false; 5286 return false;
5287 } 5287 }
5288 5288
5289 void WebGLRenderingContext::vertexAttribfImpl(const char* functionName, GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfl oat v3) 5289 void WebGLRenderingContext::vertexAttribfImpl(const char* functionName, GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfl oat v3)
5290 { 5290 {
5291 if (isContextLost()) 5291 if (isContextLost())
5292 return; 5292 return;
5293 if (index >= m_maxVertexAttribs) { 5293 if (index >= m_maxVertexAttribs) {
5294 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "index out of range"); 5294 synthesizeGLError(GL_INVALID_VALUE, functionName, "index out of range");
5295 return; 5295 return;
5296 } 5296 }
5297 // In GL, we skip setting vertexAttrib0 values. 5297 // In GL, we skip setting vertexAttrib0 values.
5298 switch (expectedSize) { 5298 switch (expectedSize) {
5299 case 1: 5299 case 1:
5300 m_context->vertexAttrib1f(index, v0); 5300 m_context->vertexAttrib1f(index, v0);
5301 break; 5301 break;
5302 case 2: 5302 case 2:
5303 m_context->vertexAttrib2f(index, v0, v1); 5303 m_context->vertexAttrib2f(index, v0, v1);
5304 break; 5304 break;
5305 case 3: 5305 case 3:
5306 m_context->vertexAttrib3f(index, v0, v1, v2); 5306 m_context->vertexAttrib3f(index, v0, v1, v2);
5307 break; 5307 break;
5308 case 4: 5308 case 4:
5309 m_context->vertexAttrib4f(index, v0, v1, v2, v3); 5309 m_context->vertexAttrib4f(index, v0, v1, v2, v3);
5310 break; 5310 break;
5311 } 5311 }
5312 VertexAttribValue& attribValue = m_vertexAttribValue[index]; 5312 VertexAttribValue& attribValue = m_vertexAttribValue[index];
5313 attribValue.value[0] = v0; 5313 attribValue.value[0] = v0;
5314 attribValue.value[1] = v1; 5314 attribValue.value[1] = v1;
5315 attribValue.value[2] = v2; 5315 attribValue.value[2] = v2;
5316 attribValue.value[3] = v3; 5316 attribValue.value[3] = v3;
5317 } 5317 }
5318 5318
5319 void WebGLRenderingContext::vertexAttribfvImpl(const char* functionName, GC3Duin t index, Float32Array* v, GC3Dsizei expectedSize) 5319 void WebGLRenderingContext::vertexAttribfvImpl(const char* functionName, GC3Duin t index, Float32Array* v, GC3Dsizei expectedSize)
5320 { 5320 {
5321 if (isContextLost()) 5321 if (isContextLost())
5322 return; 5322 return;
5323 if (!v) { 5323 if (!v) {
5324 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ar ray"); 5324 synthesizeGLError(GL_INVALID_VALUE, functionName, "no array");
5325 return; 5325 return;
5326 } 5326 }
5327 vertexAttribfvImpl(functionName, index, v->data(), v->length(), expectedSize ); 5327 vertexAttribfvImpl(functionName, index, v->data(), v->length(), expectedSize );
5328 } 5328 }
5329 5329
5330 void WebGLRenderingContext::vertexAttribfvImpl(const char* functionName, GC3Duin t index, GC3Dfloat* v, GC3Dsizei size, GC3Dsizei expectedSize) 5330 void WebGLRenderingContext::vertexAttribfvImpl(const char* functionName, GC3Duin t index, GC3Dfloat* v, GC3Dsizei size, GC3Dsizei expectedSize)
5331 { 5331 {
5332 if (isContextLost()) 5332 if (isContextLost())
5333 return; 5333 return;
5334 if (!v) { 5334 if (!v) {
5335 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "no ar ray"); 5335 synthesizeGLError(GL_INVALID_VALUE, functionName, "no array");
5336 return; 5336 return;
5337 } 5337 }
5338 if (size < expectedSize) { 5338 if (size < expectedSize) {
5339 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "inval id size"); 5339 synthesizeGLError(GL_INVALID_VALUE, functionName, "invalid size");
5340 return; 5340 return;
5341 } 5341 }
5342 if (index >= m_maxVertexAttribs) { 5342 if (index >= m_maxVertexAttribs) {
5343 synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, "index out of range"); 5343 synthesizeGLError(GL_INVALID_VALUE, functionName, "index out of range");
5344 return; 5344 return;
5345 } 5345 }
5346 // In GL, we skip setting vertexAttrib0 values. 5346 // In GL, we skip setting vertexAttrib0 values.
5347 switch (expectedSize) { 5347 switch (expectedSize) {
5348 case 1: 5348 case 1:
5349 m_context->vertexAttrib1fv(index, v); 5349 m_context->vertexAttrib1fv(index, v);
5350 break; 5350 break;
5351 case 2: 5351 case 2:
5352 m_context->vertexAttrib2fv(index, v); 5352 m_context->vertexAttrib2fv(index, v);
5353 break; 5353 break;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
5395 5395
5396 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled ())) 5396 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled ()))
5397 return; 5397 return;
5398 5398
5399 // Reset the context attributes back to the requested attributes and re-appl y restrictions 5399 // Reset the context attributes back to the requested attributes and re-appl y restrictions
5400 m_attributes = adjustAttributes(m_requestedAttributes, settings); 5400 m_attributes = adjustAttributes(m_requestedAttributes, settings);
5401 5401
5402 RefPtr<GraphicsContext3D> context(GraphicsContext3D::create(m_attributes)); 5402 RefPtr<GraphicsContext3D> context(GraphicsContext3D::create(m_attributes));
5403 5403
5404 if (!context) { 5404 if (!context) {
5405 if (m_contextLostMode == RealLostContext) 5405 if (m_contextLostMode == RealLostContext) {
5406 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts); 5406 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts);
5407 else 5407 } else {
5408 // This likely shouldn't happen but is the best way to report it to the WebGL app. 5408 // This likely shouldn't happen but is the best way to report it to the WebGL app.
5409 synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "", "error r estoring context"); 5409 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context ");
5410 }
5410 return; 5411 return;
5411 } 5412 }
5412 5413
5413 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR ef(new WebGLRenderingContextEvictionManager()); 5414 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR ef(new WebGLRenderingContextEvictionManager());
5414 5415
5415 // Construct a new drawing buffer with the new GraphicsContext3D. 5416 // Construct a new drawing buffer with the new GraphicsContext3D.
5416 m_drawingBuffer->releaseResources(); 5417 m_drawingBuffer->releaseResources();
5417 DrawingBuffer::PreserveDrawingBuffer preserve = m_attributes.preserveDrawing Buffer ? DrawingBuffer::Preserve : DrawingBuffer::Discard; 5418 DrawingBuffer::PreserveDrawingBuffer preserve = m_attributes.preserveDrawing Buffer ? DrawingBuffer::Preserve : DrawingBuffer::Discard;
5418 m_drawingBuffer = DrawingBuffer::create(context.get(), clampedCanvasSize(), preserve, contextEvictionManager.release()); 5419 m_drawingBuffer = DrawingBuffer::create(context.get(), clampedCanvasSize(), preserve, contextEvictionManager.release());
5419 5420
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
5473 { 5474 {
5474 for (int i = idx; i > 0; --i) 5475 for (int i = idx; i > 0; --i)
5475 m_buffers[i].swap(m_buffers[i-1]); 5476 m_buffers[i].swap(m_buffers[i-1]);
5476 } 5477 }
5477 5478
5478 namespace { 5479 namespace {
5479 5480
5480 String GetErrorString(GC3Denum error) 5481 String GetErrorString(GC3Denum error)
5481 { 5482 {
5482 switch (error) { 5483 switch (error) {
5483 case GraphicsContext3D::INVALID_ENUM: 5484 case GL_INVALID_ENUM:
5484 return "INVALID_ENUM"; 5485 return "INVALID_ENUM";
5485 case GraphicsContext3D::INVALID_VALUE: 5486 case GL_INVALID_VALUE:
5486 return "INVALID_VALUE"; 5487 return "INVALID_VALUE";
5487 case GraphicsContext3D::INVALID_OPERATION: 5488 case GL_INVALID_OPERATION:
5488 return "INVALID_OPERATION"; 5489 return "INVALID_OPERATION";
5489 case GraphicsContext3D::OUT_OF_MEMORY: 5490 case GL_OUT_OF_MEMORY:
5490 return "OUT_OF_MEMORY"; 5491 return "OUT_OF_MEMORY";
5491 case GraphicsContext3D::INVALID_FRAMEBUFFER_OPERATION: 5492 case GL_INVALID_FRAMEBUFFER_OPERATION:
5492 return "INVALID_FRAMEBUFFER_OPERATION"; 5493 return "INVALID_FRAMEBUFFER_OPERATION";
5493 case GraphicsContext3D::CONTEXT_LOST_WEBGL: 5494 case GC3D_CONTEXT_LOST_WEBGL:
5494 return "CONTEXT_LOST_WEBGL"; 5495 return "CONTEXT_LOST_WEBGL";
5495 default: 5496 default:
5496 return String::format("WebGL ERROR(0x%04X)", error); 5497 return String::format("WebGL ERROR(0x%04X)", error);
5497 } 5498 }
5498 } 5499 }
5499 5500
5500 } // namespace anonymous 5501 } // namespace anonymous
5501 5502
5502 void WebGLRenderingContext::synthesizeGLError(GC3Denum error, const char* functi onName, const char* description, ConsoleDisplayPreference display) 5503 void WebGLRenderingContext::synthesizeGLError(GC3Denum error, const char* functi onName, const char* description, ConsoleDisplayPreference display)
5503 { 5504 {
(...skipping 23 matching lines...) Expand all
5527 void WebGLRenderingContext::applyStencilTest() 5528 void WebGLRenderingContext::applyStencilTest()
5528 { 5529 {
5529 bool haveStencilBuffer = false; 5530 bool haveStencilBuffer = false;
5530 5531
5531 if (m_framebufferBinding) 5532 if (m_framebufferBinding)
5532 haveStencilBuffer = m_framebufferBinding->hasStencilBuffer(); 5533 haveStencilBuffer = m_framebufferBinding->hasStencilBuffer();
5533 else { 5534 else {
5534 RefPtr<WebGLContextAttributes> attributes = getContextAttributes(); 5535 RefPtr<WebGLContextAttributes> attributes = getContextAttributes();
5535 haveStencilBuffer = attributes->stencil(); 5536 haveStencilBuffer = attributes->stencil();
5536 } 5537 }
5537 enableOrDisable(GraphicsContext3D::STENCIL_TEST, 5538 enableOrDisable(GL_STENCIL_TEST,
5538 m_stencilEnabled && haveStencilBuffer); 5539 m_stencilEnabled && haveStencilBuffer);
5539 } 5540 }
5540 5541
5541 void WebGLRenderingContext::enableOrDisable(GC3Denum capability, bool enable) 5542 void WebGLRenderingContext::enableOrDisable(GC3Denum capability, bool enable)
5542 { 5543 {
5543 if (isContextLost()) 5544 if (isContextLost())
5544 return; 5545 return;
5545 if (enable) 5546 if (enable)
5546 m_context->enable(capability); 5547 m_context->enable(capability);
5547 else 5548 else
(...skipping 27 matching lines...) Expand all
5575 return m_maxColorAttachments; 5576 return m_maxColorAttachments;
5576 } 5577 }
5577 5578
5578 void WebGLRenderingContext::setBackDrawBuffer(GC3Denum buf) 5579 void WebGLRenderingContext::setBackDrawBuffer(GC3Denum buf)
5579 { 5580 {
5580 m_backDrawBuffer = buf; 5581 m_backDrawBuffer = buf;
5581 } 5582 }
5582 5583
5583 void WebGLRenderingContext::restoreCurrentFramebuffer() 5584 void WebGLRenderingContext::restoreCurrentFramebuffer()
5584 { 5585 {
5585 bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_framebufferBinding.get()); 5586 bindFramebuffer(GL_FRAMEBUFFER, m_framebufferBinding.get());
5586 } 5587 }
5587 5588
5588 void WebGLRenderingContext::restoreCurrentTexture2D() 5589 void WebGLRenderingContext::restoreCurrentTexture2D()
5589 { 5590 {
5590 bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureUnits[m_activeTextureUni t].m_texture2DBinding.get()); 5591 bindTexture(GL_TEXTURE_2D, m_textureUnits[m_activeTextureUnit].m_texture2DBi nding.get());
5591 } 5592 }
5592 5593
5593 void WebGLRenderingContext::multisamplingChanged(bool enabled) 5594 void WebGLRenderingContext::multisamplingChanged(bool enabled)
5594 { 5595 {
5595 if (m_multisamplingAllowed != enabled) { 5596 if (m_multisamplingAllowed != enabled) {
5596 m_multisamplingAllowed = enabled; 5597 m_multisamplingAllowed = enabled;
5597 forceLostContext(WebGLRenderingContext::AutoRecoverSyntheticLostContext) ; 5598 forceLostContext(WebGLRenderingContext::AutoRecoverSyntheticLostContext) ;
5598 } 5599 }
5599 } 5600 }
5600 5601
(...skipping 18 matching lines...) Expand all
5619 if (m_textureUnits[i].m_texture2DBinding 5620 if (m_textureUnits[i].m_texture2DBinding
5620 || m_textureUnits[i].m_textureCubeMapBinding) { 5621 || m_textureUnits[i].m_textureCubeMapBinding) {
5621 m_onePlusMaxNonDefaultTextureUnit = i + 1; 5622 m_onePlusMaxNonDefaultTextureUnit = i + 1;
5622 return; 5623 return;
5623 } 5624 }
5624 } 5625 }
5625 m_onePlusMaxNonDefaultTextureUnit = 0; 5626 m_onePlusMaxNonDefaultTextureUnit = 0;
5626 } 5627 }
5627 5628
5628 } // namespace WebCore 5629 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/html/canvas/WebGLRenderbuffer.cpp ('k') | Source/core/html/canvas/WebGLTexture.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698