Changeset 51884 in webkit


Ignore:
Timestamp:
Dec 8, 2009 6:38:06 PM (14 years ago)
Author:
eric@webkit.org
Message:

2009-12-08 Peterson Trethewey <petersont@google.com>

Reviewed by Oliver Hunt.

Implement WebGLUniformLocation and change API to use it.
https://bugs.webkit.org/show_bug.cgi?id=31173

  • fast/canvas/webgl/resources/structUniformShader.vert: Added.
  • fast/canvas/webgl/script-tests/uniform-location.js: Added.
  • fast/canvas/webgl/uniform-location-expected.txt: Added.
  • fast/canvas/webgl/uniform-location.html: Added.

2009-12-08 Peterson Trethewey <petersont@google.com>

Reviewed by Oliver Hunt.

Implement WebGLUniformLocation and change API to use it.
https://bugs.webkit.org/show_bug.cgi?id=31173

Test: fast/canvas/webgl/uniform-location.html

  • DerivedSources.make:
  • WebCore.gypi:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSWebGLRenderingContextCustom.cpp: (WebCore::JSWebGLRenderingContext::getProgramParameter): (WebCore::JSWebGLRenderingContext::getUniform): (WebCore::functionForUniform): (WebCore::dataFunctionf): (WebCore::dataFunctioni): (WebCore::dataFunctionMatrix):
  • bindings/scripts/CodeGeneratorV8.pm:
  • bindings/v8/DerivedSourcesAllInOne.cpp:
  • bindings/v8/V8Index.cpp:
  • bindings/v8/V8Index.h:
  • bindings/v8/custom/V8WebGLRenderingContextCustom.cpp: (WebCore::toWebGLUniformLocation): (WebCore::): (WebCore::CALLBACK_FUNC_DECL): (WebCore::isFunctionToCallForAttribute): (WebCore::vertexAttribAndUniformHelperf): (WebCore::uniformHelperi): (WebCore::uniformMatrixHelper):
  • html/canvas/WebGLRenderingContext.cpp: (WebCore::WebGLRenderingContext::getUniform): (WebCore::WebGLRenderingContext::getUniformLocation): (WebCore::WebGLRenderingContext::uniform1f): (WebCore::WebGLRenderingContext::uniform1fv): (WebCore::WebGLRenderingContext::uniform1i): (WebCore::WebGLRenderingContext::uniform1iv): (WebCore::WebGLRenderingContext::uniform2f): (WebCore::WebGLRenderingContext::uniform2fv): (WebCore::WebGLRenderingContext::uniform2i): (WebCore::WebGLRenderingContext::uniform2iv): (WebCore::WebGLRenderingContext::uniform3f): (WebCore::WebGLRenderingContext::uniform3fv): (WebCore::WebGLRenderingContext::uniform3i): (WebCore::WebGLRenderingContext::uniform3iv): (WebCore::WebGLRenderingContext::uniform4f): (WebCore::WebGLRenderingContext::uniform4fv): (WebCore::WebGLRenderingContext::uniform4i): (WebCore::WebGLRenderingContext::uniform4iv): (WebCore::WebGLRenderingContext::uniformMatrix2fv): (WebCore::WebGLRenderingContext::uniformMatrix3fv): (WebCore::WebGLRenderingContext::uniformMatrix4fv):
  • html/canvas/WebGLRenderingContext.h:
  • html/canvas/WebGLRenderingContext.idl:
  • html/canvas/WebGLUniformLocation.cpp: Added. (WebCore::WebGLUniformLocation::create): (WebCore::WebGLUniformLocation::WebGLUniformLocation):
  • html/canvas/WebGLUniformLocation.h: Added. (WebCore::WebGLUniformLocation::~WebGLUniformLocation): (WebCore::WebGLUniformLocation::program): (WebCore::WebGLUniformLocation::location):
  • html/canvas/WebGLUniformLocation.idl: Added.
Location:
trunk
Files:
7 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r51883 r51884  
     12009-12-08  Peterson Trethewey  <petersont@google.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Implement WebGLUniformLocation and change API to use it.
     6        https://bugs.webkit.org/show_bug.cgi?id=31173
     7
     8        * fast/canvas/webgl/resources/structUniformShader.vert: Added.
     9        * fast/canvas/webgl/script-tests/uniform-location.js: Added.
     10        * fast/canvas/webgl/uniform-location-expected.txt: Added.
     11        * fast/canvas/webgl/uniform-location.html: Added.
     12
    1132009-12-08  Adam Langley  <agl@google.com>
    214
  • trunk/WebCore/ChangeLog

    r51883 r51884  
     12009-12-08  Peterson Trethewey  <petersont@google.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Implement WebGLUniformLocation and change API to use it.
     6        https://bugs.webkit.org/show_bug.cgi?id=31173
     7
     8        Test: fast/canvas/webgl/uniform-location.html
     9
     10        * DerivedSources.make:
     11        * WebCore.gypi:
     12        * WebCore.xcodeproj/project.pbxproj:
     13        * bindings/js/JSWebGLRenderingContextCustom.cpp:
     14        (WebCore::JSWebGLRenderingContext::getProgramParameter):
     15        (WebCore::JSWebGLRenderingContext::getUniform):
     16        (WebCore::functionForUniform):
     17        (WebCore::dataFunctionf):
     18        (WebCore::dataFunctioni):
     19        (WebCore::dataFunctionMatrix):
     20        * bindings/scripts/CodeGeneratorV8.pm:
     21        * bindings/v8/DerivedSourcesAllInOne.cpp:
     22        * bindings/v8/V8Index.cpp:
     23        * bindings/v8/V8Index.h:
     24        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
     25        (WebCore::toWebGLUniformLocation):
     26        (WebCore::):
     27        (WebCore::CALLBACK_FUNC_DECL):
     28        (WebCore::isFunctionToCallForAttribute):
     29        (WebCore::vertexAttribAndUniformHelperf):
     30        (WebCore::uniformHelperi):
     31        (WebCore::uniformMatrixHelper):
     32        * html/canvas/WebGLRenderingContext.cpp:
     33        (WebCore::WebGLRenderingContext::getUniform):
     34        (WebCore::WebGLRenderingContext::getUniformLocation):
     35        (WebCore::WebGLRenderingContext::uniform1f):
     36        (WebCore::WebGLRenderingContext::uniform1fv):
     37        (WebCore::WebGLRenderingContext::uniform1i):
     38        (WebCore::WebGLRenderingContext::uniform1iv):
     39        (WebCore::WebGLRenderingContext::uniform2f):
     40        (WebCore::WebGLRenderingContext::uniform2fv):
     41        (WebCore::WebGLRenderingContext::uniform2i):
     42        (WebCore::WebGLRenderingContext::uniform2iv):
     43        (WebCore::WebGLRenderingContext::uniform3f):
     44        (WebCore::WebGLRenderingContext::uniform3fv):
     45        (WebCore::WebGLRenderingContext::uniform3i):
     46        (WebCore::WebGLRenderingContext::uniform3iv):
     47        (WebCore::WebGLRenderingContext::uniform4f):
     48        (WebCore::WebGLRenderingContext::uniform4fv):
     49        (WebCore::WebGLRenderingContext::uniform4i):
     50        (WebCore::WebGLRenderingContext::uniform4iv):
     51        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
     52        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
     53        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
     54        * html/canvas/WebGLRenderingContext.h:
     55        * html/canvas/WebGLRenderingContext.idl:
     56        * html/canvas/WebGLUniformLocation.cpp: Added.
     57        (WebCore::WebGLUniformLocation::create):
     58        (WebCore::WebGLUniformLocation::WebGLUniformLocation):
     59        * html/canvas/WebGLUniformLocation.h: Added.
     60        (WebCore::WebGLUniformLocation::~WebGLUniformLocation):
     61        (WebCore::WebGLUniformLocation::program):
     62        (WebCore::WebGLUniformLocation::location):
     63        * html/canvas/WebGLUniformLocation.idl: Added.
     64
    1652009-12-08  Adam Langley  <agl@google.com>
    266
  • trunk/WebCore/DerivedSources.make

    r51793 r51884  
    8989    WebGLShortArray \
    9090    WebGLTexture \
     91    WebGLUniformLocation \
    9192    WebGLUnsignedByteArray \
    9293    WebGLUnsignedIntArray \
  • trunk/WebCore/WebCore.gypi

    r51839 r51884  
    9797            'html/canvas/WebGLShader.idl',
    9898            'html/canvas/WebGLShortArray.idl',
     99            'html/canvas/WebGLUniformLocation.idl',
    99100            'html/canvas/WebGLUnsignedByteArray.idl',
    100101            'html/canvas/WebGLUnsignedIntArray.idl',
     
    13251326            'html/canvas/WebGLTexture.cpp',
    13261327            'html/canvas/WebGLTexture.h',
     1328            'html/canvas/WebGLUniformLocation.cpp',
     1329            'html/canvas/WebGLUniformLocation.h',
    13271330            'html/canvas/WebGLUnsignedByteArray.cpp',
    13281331            'html/canvas/WebGLUnsignedByteArray.h',
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r51839 r51884  
    157157                0B9056F90F2685F30095FF6A /* WorkerThreadableLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */; settings = {ATTRIBUTES = (); }; };
    158158                0BE030A20F3112FB003C1A46 /* RenderLineBoxList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */; settings = {ATTRIBUTES = (Private, ); }; };
     159                0C3F1F5A10C8871200D72CE1 /* WebGLUniformLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */; };
     160                0C3F1F5B10C8871200D72CE1 /* WebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */; };
     161                0C3F1F5C10C8871200D72CE1 /* WebGLUniformLocation.idl in Resources */ = {isa = PBXBuildFile; fileRef = 0C3F1F5910C8871200D72CE1 /* WebGLUniformLocation.idl */; };
     162                0C45342710CDBBFA00869157 /* JSWebGLUniformLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C45342510CDBBFA00869157 /* JSWebGLUniformLocation.cpp */; };
     163                0C45342810CDBBFA00869157 /* JSWebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */; };
    159164                0F11A54F0F39233100C37884 /* RenderSelectionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F11A54E0F39233100C37884 /* RenderSelectionInfo.h */; };
    160165                0F15DA8A0F3AAEE70000CE47 /* AnimationControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */; };
     
    53525357                0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerThreadableLoader.h; sourceTree = "<group>"; };
    53535358                0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderLineBoxList.h; sourceTree = "<group>"; };
     5359                0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebGLUniformLocation.cpp; path = canvas/WebGLUniformLocation.cpp; sourceTree = "<group>"; };
     5360                0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebGLUniformLocation.h; path = canvas/WebGLUniformLocation.h; sourceTree = "<group>"; };
     5361                0C3F1F5910C8871200D72CE1 /* WebGLUniformLocation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = WebGLUniformLocation.idl; path = canvas/WebGLUniformLocation.idl; sourceTree = "<group>"; };
     5362                0C45342510CDBBFA00869157 /* JSWebGLUniformLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLUniformLocation.cpp; sourceTree = "<group>"; };
     5363                0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLUniformLocation.h; sourceTree = "<group>"; };
    53545364                0F11A54E0F39233100C37884 /* RenderSelectionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSelectionInfo.h; sourceTree = "<group>"; };
    53555365                0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationControllerPrivate.h; path = animation/AnimationControllerPrivate.h; sourceTree = "<group>"; };
     
    1074010750                                49C7B9C61042D32F0009D447 /* WebGLTexture.h */,
    1074110751                                49C7B9C71042D32F0009D447 /* WebGLTexture.idl */,
     10752                                0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */,
     10753                                0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */,
     10754                                0C3F1F5910C8871200D72CE1 /* WebGLUniformLocation.idl */,
    1074210755                                49EECDD610503C2300099FAB /* WebGLUnsignedByteArray.cpp */,
    1074310756                                49EECDD710503C2300099FAB /* WebGLUnsignedByteArray.h */,
     
    1290012913                                49C7B9911042D2D30009D447 /* JSWebGLTexture.cpp */,
    1290112914                                49C7B9921042D2D30009D447 /* JSWebGLTexture.h */,
     12915                                0C45342510CDBBFA00869157 /* JSWebGLUniformLocation.cpp */,
     12916                                0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */,
    1290212917                                49EECEFA105070C400099FAB /* JSWebGLUnsignedByteArray.cpp */,
    1290312918                                49EECEFB105070C400099FAB /* JSWebGLUnsignedByteArray.h */,
     
    1823018245                                599D1E3310C97D6E00E0EF12 /* jni_utility_private.h in Headers */,
    1823118246                                7ADE722610CBBB9B006B3B3A /* ContextMenuSelectionHandler.h in Headers */,
     18247                                0C3F1F5B10C8871200D72CE1 /* WebGLUniformLocation.h in Headers */,
     18248                                0C45342810CDBBFA00869157 /* JSWebGLUniformLocation.h in Headers */,
    1823218249                        );
    1823318250                        runOnlyForDeploymentPostprocessing = 0;
     
    1833118348                                1AB1AE7B0C051FDE00139F4F /* zoomOutCursor.png in Resources */,
    1833218349                                5174E20C10A1F49A00F95E6F /* PopStateEvent.idl in Resources */,
     18350                                0C3F1F5C10C8871200D72CE1 /* WebGLUniformLocation.idl in Resources */,
    1833318351                        );
    1833418352                        runOnlyForDeploymentPostprocessing = 0;
     
    2038420402                                F4EAF4AE10C742B1009100D3 /* OpenTypeSanitizer.cpp in Sources */,
    2038520403                                599D1E3210C97D6E00E0EF12 /* jni_utility_private.cpp in Sources */,
     20404                                0C3F1F5A10C8871200D72CE1 /* WebGLUniformLocation.cpp in Sources */,
     20405                                0C45342710CDBBFA00869157 /* JSWebGLUniformLocation.cpp in Sources */,
    2038620406                        );
    2038720407                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp

    r51348 r51884  
    4444#include "JSWebGLShader.h"
    4545#include "JSWebGLTexture.h"
     46#include "JSWebGLUniformLocation.h"
    4647#include "JSWebGLUnsignedByteArray.h"
    4748#include "JSWebKitCSSMatrix.h"
     
    188189};
    189190
    190 static JSValue getProgramParameterHelper(JSWebGLRenderingContext* obj, ExecState* exec, const ArgList& args, WhichProgramCall programCall)
     191JSValue JSWebGLRenderingContext::getBufferParameter(ExecState* exec, const ArgList& args)
     192{
     193    return getObjectParameter(this, exec, args, kBuffer);
     194}
     195
     196JSValue JSWebGLRenderingContext::getFramebufferAttachmentParameter(ExecState* exec, const ArgList& args)
     197{
     198    if (args.size() != 3)
     199        return throwError(exec, SyntaxError);
     200
     201    ExceptionCode ec = 0;
     202    WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl());
     203    unsigned target = args.at(0).toInt32(exec);
     204    if (exec->hadException())
     205        return jsUndefined();
     206    unsigned attachment = args.at(1).toInt32(exec);
     207    if (exec->hadException())
     208        return jsUndefined();
     209    unsigned pname = args.at(2).toInt32(exec);
     210    if (exec->hadException())
     211        return jsUndefined();
     212    WebGLGetInfo info = context->getFramebufferAttachmentParameter(target, attachment, pname, ec);
     213    if (ec) {
     214        setDOMException(exec, ec);
     215        return jsUndefined();
     216    }
     217    return toJS(exec, globalObject(), info);
     218}
     219
     220JSValue JSWebGLRenderingContext::getParameter(ExecState* exec, const ArgList& args)
     221{
     222    if (args.size() != 1)
     223        return throwError(exec, SyntaxError);
     224
     225    ExceptionCode ec = 0;
     226    WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl());
     227    unsigned pname = args.at(0).toInt32(exec);
     228    if (exec->hadException())
     229        return jsUndefined();
     230    WebGLGetInfo info = context->getParameter(pname, ec);
     231    if (ec) {
     232        setDOMException(exec, ec);
     233        return jsUndefined();
     234    }
     235    return toJS(exec, globalObject(), info);
     236}
     237
     238JSValue JSWebGLRenderingContext::getProgramParameter(ExecState* exec, const ArgList& args)
    191239{
    192240    if (args.size() != 2)
     
    194242
    195243    ExceptionCode ec = 0;
    196     WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(obj->impl());
     244    WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl());
    197245    WebGLProgram* program = toWebGLProgram(args.at(0));
    198246    unsigned pname = args.at(1).toInt32(exec);
    199247    if (exec->hadException())
    200248        return jsUndefined();
    201     WebGLGetInfo info;
    202     switch (programCall) {
    203     case kProgramParameter:
    204         info = context->getProgramParameter(program, pname, ec);
    205         break;
    206     case kUniform:
    207         // pname -> location
    208         info = context->getUniform(program, pname, ec);
    209         break;
    210     default:
    211         notImplemented();
    212         break;
    213     }
     249    WebGLGetInfo info = context->getProgramParameter(program, pname, ec);
    214250    if (ec) {
    215251        setDOMException(exec, ec);
    216252        return jsUndefined();
    217253    }
    218     return toJS(exec, obj->globalObject(), info);
    219 }
    220 
    221 JSValue JSWebGLRenderingContext::getBufferParameter(ExecState* exec, const ArgList& args)
    222 {
    223     return getObjectParameter(this, exec, args, kBuffer);
    224 }
    225 
    226 JSValue JSWebGLRenderingContext::getFramebufferAttachmentParameter(ExecState* exec, const ArgList& args)
    227 {
    228     if (args.size() != 3)
    229         return throwError(exec, SyntaxError);
    230 
    231     ExceptionCode ec = 0;
    232     WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl());
    233     unsigned target = args.at(0).toInt32(exec);
    234     if (exec->hadException())
    235         return jsUndefined();
    236     unsigned attachment = args.at(1).toInt32(exec);
    237     if (exec->hadException())
    238         return jsUndefined();
    239     unsigned pname = args.at(2).toInt32(exec);
    240     if (exec->hadException())
    241         return jsUndefined();
    242     WebGLGetInfo info = context->getFramebufferAttachmentParameter(target, attachment, pname, ec);
    243     if (ec) {
    244         setDOMException(exec, ec);
    245         return jsUndefined();
    246     }
    247254    return toJS(exec, globalObject(), info);
    248 }
    249 
    250 JSValue JSWebGLRenderingContext::getParameter(ExecState* exec, const ArgList& args)
    251 {
    252     if (args.size() != 1)
    253         return throwError(exec, SyntaxError);
    254 
    255     ExceptionCode ec = 0;
    256     WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl());
    257     unsigned pname = args.at(0).toInt32(exec);
    258     if (exec->hadException())
    259         return jsUndefined();
    260     WebGLGetInfo info = context->getParameter(pname, ec);
    261     if (ec) {
    262         setDOMException(exec, ec);
    263         return jsUndefined();
    264     }
    265     return toJS(exec, globalObject(), info);
    266 }
    267 
    268 JSValue JSWebGLRenderingContext::getProgramParameter(ExecState* exec, const ArgList& args)
    269 {
    270     return getProgramParameterHelper(this, exec, args, kProgramParameter);
    271255}
    272256
     
    302286JSValue JSWebGLRenderingContext::getUniform(ExecState* exec, const ArgList& args)
    303287{
    304     return getProgramParameterHelper(this, exec, args, kUniform);
     288    if (args.size() != 2)
     289        return throwError(exec, SyntaxError);
     290
     291    ExceptionCode ec = 0;
     292    WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(impl());
     293    WebGLProgram* program = toWebGLProgram(args.at(0));
     294    WebGLUniformLocation* loc = toWebGLUniformLocation(args.at(1));
     295    if (exec->hadException())
     296        return jsUndefined();
     297    WebGLGetInfo info = context->getUniform(program, loc, ec);
     298    if (ec) {
     299        setDOMException(exec, ec);
     300        return jsUndefined();
     301    }
     302    return toJS(exec, globalObject(), info);
    305303}
    306304
     
    464462};
    465463
     464bool functionForUniform(DataFunctionToCall f)
     465{
     466    switch (f) {
     467    case f_uniform1v:
     468    case f_uniform2v:
     469    case f_uniform3v:
     470    case f_uniform4v:
     471        return true;
     472        break;
     473    default: break;
     474    }
     475    return false;
     476}
     477
    466478static JSC::JSValue dataFunctionf(DataFunctionToCall f, JSC::ExecState* exec, const JSC::ArgList& args, WebGLRenderingContext* context)
    467479{
    468480    if (args.size() != 2)
    469481        return throwError(exec, SyntaxError);
    470 
    471     long location = args.at(0).toInt32(exec);
    472     if (exec->hadException())   
     482   
     483    WebGLUniformLocation* location = 0;
     484    long index = -1;
     485   
     486    if (functionForUniform(f))
     487        location = toWebGLUniformLocation(args.at(0));
     488    else
     489        index = args.at(0).toInt32(exec);
     490
     491    if (exec->hadException())
    473492        return jsUndefined();
    474493       
     
    477496        return jsUndefined();
    478497       
     498    ExceptionCode ec = 0;
    479499    if (webGLArray) {
    480500        switch(f) {
    481             case f_uniform1v: context->uniform1fv(location, webGLArray.get()); break;
    482             case f_uniform2v: context->uniform2fv(location, webGLArray.get()); break;
    483             case f_uniform3v: context->uniform3fv(location, webGLArray.get()); break;
    484             case f_uniform4v: context->uniform4fv(location, webGLArray.get()); break;
    485             case f_vertexAttrib1v: context->vertexAttrib1fv(location, webGLArray.get()); break;
    486             case f_vertexAttrib2v: context->vertexAttrib2fv(location, webGLArray.get()); break;
    487             case f_vertexAttrib3v: context->vertexAttrib3fv(location, webGLArray.get()); break;
    488             case f_vertexAttrib4v: context->vertexAttrib4fv(location, webGLArray.get()); break;
     501            case f_uniform1v: context->uniform1fv(location, webGLArray.get(), ec); break;
     502            case f_uniform2v: context->uniform2fv(location, webGLArray.get(), ec); break;
     503            case f_uniform3v: context->uniform3fv(location, webGLArray.get(), ec); break;
     504            case f_uniform4v: context->uniform4fv(location, webGLArray.get(), ec); break;
     505            case f_vertexAttrib1v: context->vertexAttrib1fv(index, webGLArray.get()); break;
     506            case f_vertexAttrib2v: context->vertexAttrib2fv(index, webGLArray.get()); break;
     507            case f_vertexAttrib3v: context->vertexAttrib3fv(index, webGLArray.get()); break;
     508            case f_vertexAttrib4v: context->vertexAttrib4fv(index, webGLArray.get()); break;
    489509        }
     510        if (ec != 0)
     511            setDOMException(exec, ec);
    490512        return jsUndefined();
    491513    }
     
    499521
    500522    switch(f) {
    501         case f_uniform1v: context->uniform1fv(location, array, size); break;
    502         case f_uniform2v: context->uniform2fv(location, array, size); break;
    503         case f_uniform3v: context->uniform3fv(location, array, size); break;
    504         case f_uniform4v: context->uniform4fv(location, array, size); break;
    505         case f_vertexAttrib1v: context->vertexAttrib1fv(location, array, size); break;
    506         case f_vertexAttrib2v: context->vertexAttrib2fv(location, array, size); break;
    507         case f_vertexAttrib3v: context->vertexAttrib3fv(location, array, size); break;
    508         case f_vertexAttrib4v: context->vertexAttrib4fv(location, array, size); break;
    509     }
     523        case f_uniform1v: context->uniform1fv(location, array, size, ec); break;
     524        case f_uniform2v: context->uniform2fv(location, array, size, ec); break;
     525        case f_uniform3v: context->uniform3fv(location, array, size, ec); break;
     526        case f_uniform4v: context->uniform4fv(location, array, size, ec); break;
     527        case f_vertexAttrib1v: context->vertexAttrib1fv(index, array, size); break;
     528        case f_vertexAttrib2v: context->vertexAttrib2fv(index, array, size); break;
     529        case f_vertexAttrib3v: context->vertexAttrib3fv(index, array, size); break;
     530        case f_vertexAttrib4v: context->vertexAttrib4fv(index, array, size); break;
     531    }
     532    if (ec != 0)
     533        setDOMException(exec, ec);
    510534    return jsUndefined();
    511535}
     
    516540        return throwError(exec, SyntaxError);
    517541
    518     long location = args.at(0).toInt32(exec);
    519     if (exec->hadException())   
     542    WebGLUniformLocation* location = toWebGLUniformLocation(args.at(0));
     543 
     544    if (exec->hadException())
    520545        return jsUndefined();
    521546       
     
    524549        return jsUndefined();
    525550       
     551    ExceptionCode ec = 0;
    526552    if (webGLArray) {
    527553        switch(f) {
    528             case f_uniform1v: context->uniform1iv(location, webGLArray.get()); break;
    529             case f_uniform2v: context->uniform2iv(location, webGLArray.get()); break;
    530             case f_uniform3v: context->uniform3iv(location, webGLArray.get()); break;
    531             case f_uniform4v: context->uniform4iv(location, webGLArray.get()); break;
     554            case f_uniform1v: context->uniform1iv(location, webGLArray.get(), ec); break;
     555            case f_uniform2v: context->uniform2iv(location, webGLArray.get(), ec); break;
     556            case f_uniform3v: context->uniform3iv(location, webGLArray.get(), ec); break;
     557            case f_uniform4v: context->uniform4iv(location, webGLArray.get(), ec); break;
    532558            default: break;
    533559        }
     560        if (ec != 0)
     561            setDOMException(exec, ec);
    534562        return jsUndefined();
    535563    }
     
    543571
    544572    switch(f) {
    545         case f_uniform1v: context->uniform1iv(location, array, size); break;
    546         case f_uniform2v: context->uniform2iv(location, array, size); break;
    547         case f_uniform3v: context->uniform3iv(location, array, size); break;
    548         case f_uniform4v: context->uniform4iv(location, array, size); break;
     573        case f_uniform1v: context->uniform1iv(location, array, size, ec); break;
     574        case f_uniform2v: context->uniform2iv(location, array, size, ec); break;
     575        case f_uniform3v: context->uniform3iv(location, array, size, ec); break;
     576        case f_uniform4v: context->uniform4iv(location, array, size, ec); break;
    549577        default: break;
    550578    }
     579    if (ec != 0)
     580        setDOMException(exec, ec);
    551581    return jsUndefined();
    552582}
     
    557587        return throwError(exec, SyntaxError);
    558588
    559     long location = args.at(0).toInt32(exec);
     589    WebGLUniformLocation* location = toWebGLUniformLocation(args.at(0));
     590
    560591    if (exec->hadException())   
    561592        return jsUndefined();
     
    569600        return jsUndefined();
    570601       
     602    ExceptionCode ec = 0;
    571603    if (webGLArray) {
    572604        switch(f) {
    573             case f_uniformMatrix2fv: context->uniformMatrix2fv(location, transpose, webGLArray.get()); break;
    574             case f_uniformMatrix3fv: context->uniformMatrix3fv(location, transpose, webGLArray.get()); break;
    575             case f_uniformMatrix4fv: context->uniformMatrix4fv(location, transpose, webGLArray.get()); break;
     605            case f_uniformMatrix2fv: context->uniformMatrix2fv(location, transpose, webGLArray.get(), ec); break;
     606            case f_uniformMatrix3fv: context->uniformMatrix3fv(location, transpose, webGLArray.get(), ec); break;
     607            case f_uniformMatrix4fv: context->uniformMatrix4fv(location, transpose, webGLArray.get(), ec); break;
    576608        }
     609        if (ec != 0)
     610            setDOMException(exec, ec);
    577611        return jsUndefined();
    578612    }
     
    586620
    587621    switch(f) {
    588         case f_uniformMatrix2fv: context->uniformMatrix2fv(location, transpose, array, size); break;
    589         case f_uniformMatrix3fv: context->uniformMatrix3fv(location, transpose, array, size); break;
    590         case f_uniformMatrix4fv: context->uniformMatrix4fv(location, transpose, array, size); break;
    591     }
     622        case f_uniformMatrix2fv: context->uniformMatrix2fv(location, transpose, array, size, ec); break;
     623        case f_uniformMatrix3fv: context->uniformMatrix3fv(location, transpose, array, size, ec); break;
     624        case f_uniformMatrix4fv: context->uniformMatrix4fv(location, transpose, array, size, ec); break;
     625    }
     626    if (ec != 0)
     627        setDOMException(exec, ec);
    592628    return jsUndefined();
    593629}
  • trunk/WebCore/bindings/scripts/CodeGeneratorV8.pm

    r51125 r51884  
    18171817    return 1 if $type eq "WebGLShortArray";
    18181818    return 1 if $type eq "WebGLTexture";
     1819    return 1 if $type eq "WebGLUniformLocation";
    18191820    return 1 if $type eq "WebGLUnsignedByteArray";
    18201821    return 1 if $type eq "WebGLUnsignedIntArray";
     
    19191920    "WebGLShortArray" => 0,
    19201921    "WebGLTexture" => 0,
     1922    "WebGLUniformLocation" => 0,
    19211923    "CompareHow" => 0,
    19221924    "DataGridColumn" => 0,
  • trunk/WebCore/bindings/v8/DerivedSourcesAllInOne.cpp

    r51540 r51884  
    5858#include "bindings/V8WebGLShortArray.cpp"
    5959#include "bindings/V8WebGLTexture.cpp"
     60#include "bindings/V8WebGLUniformLocation.cpp"
    6061#include "bindings/V8WebGLUnsignedByteArray.cpp"
    6162#include "bindings/V8WebGLUnsignedIntArray.cpp"
  • trunk/WebCore/bindings/v8/V8Index.cpp

    r51540 r51884  
    408408#include "V8WebGLShortArray.h"
    409409#include "V8WebGLTexture.h"
     410#include "V8WebGLUniformLocation.h"
    410411#include "V8WebGLUnsignedByteArray.h"
    411412#include "V8WebGLUnsignedIntArray.h"
  • trunk/WebCore/bindings/v8/V8Index.h

    r51540 r51884  
    461461    V(WEBGLSHORTARRAY, WebGLShortArray)                                 \
    462462    V(WEBGLTEXTURE, WebGLTexture)                                       \
     463    V(WEBGLUNIFORMLOCATION, WebGLUniformLocation)                       \
    463464    V(WEBGLUNSIGNEDBYTEARRAY, WebGLUnsignedByteArray)                   \
    464465    V(WEBGLUNSIGNEDINTARRAY, WebGLUnsignedIntArray)                     \
  • trunk/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp

    r51348 r51884  
    4949#include "V8WebGLShader.h"
    5050#include "V8WebGLShortArray.h"
     51#include "V8WebGLUniformLocation.h"
    5152#include "V8WebGLUnsignedByteArray.h"
    5253#include "V8WebGLUnsignedIntArray.h"
     
    263264}
    264265
     266static WebGLUniformLocation* toWebGLUniformLocation(v8::Handle<v8::Value> value, bool& ok)
     267{
     268    ok = false;
     269    WebGLUniformLocation* location = 0;
     270    if (V8WebGLUniformLocation::HasInstance(value)) {
     271        location = V8DOMWrapper::convertToNativeObject<WebGLUniformLocation>(
     272            V8ClassIndex::WEBGLUNIFORMLOCATION, value->ToObject());
     273        ok = true;
     274    }
     275    return location;
     276}
     277
    265278enum WhichProgramCall {
    266279    kProgramParameter, kUniform
    267280};
    268 
    269 static v8::Handle<v8::Value> getProgramParameter(const v8::Arguments& args, WhichProgramCall programCall)
    270 {
    271     if (args.Length() != 2) {
    272         V8Proxy::setDOMException(SYNTAX_ERR);
    273         return notHandledByInterceptor();
    274     }
    275 
    276     ExceptionCode ec = 0;
    277     WebGLRenderingContext* context =
    278         V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
    279     WebGLProgram* program = V8WebGLProgram::HasInstance(args[0]) ? v8DOMWrapperTo<WebGLProgram>(V8ClassIndex::WEBGLPROGRAM, v8::Handle<v8::Object>::Cast(args[0])) : 0;
    280     bool ok;
    281     unsigned pname = toInt32(args[1], ok);
    282     if (!ok) {
    283         V8Proxy::setDOMException(SYNTAX_ERR);
    284         return notHandledByInterceptor();
    285     }
    286     WebGLGetInfo info;
    287     switch (programCall) {
    288     case kProgramParameter:
    289         info = context->getProgramParameter(program, pname, ec);
    290         break;
    291     case kUniform:
    292         // pname -> location
    293         info = context->getUniform(program, pname, ec);
    294         break;
    295     default:
    296         notImplemented();
    297         break;
    298     }
    299     if (ec) {
    300         V8Proxy::setDOMException(ec);
    301         return v8::Undefined();
    302     }
    303     return toV8(info);
    304 }
    305 
    306281
    307282CALLBACK_FUNC_DECL(WebGLRenderingContextGetBufferParameter)
     
    376351{
    377352    INC_STATS("DOM.WebGLRenderingContext.getProgramParameter()");
    378     return getProgramParameter(args, kProgramParameter);
     353
     354    if (args.Length() != 2) {
     355        V8Proxy::setDOMException(SYNTAX_ERR);
     356        return notHandledByInterceptor();
     357    }
     358
     359    ExceptionCode ec = 0;
     360    WebGLRenderingContext* context =
     361        V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
     362    WebGLProgram* program = V8WebGLProgram::HasInstance(args[0]) ? v8DOMWrapperTo<WebGLProgram>(V8ClassIndex::WEBGLPROGRAM, v8::Handle<v8::Object>::Cast(args[0])) : 0;
     363    bool ok;
     364    unsigned pname = toInt32(args[1], ok);
     365    if (!ok) {
     366        V8Proxy::setDOMException(SYNTAX_ERR);
     367        return notHandledByInterceptor();
     368    }
     369    WebGLGetInfo info = context->getProgramParameter(program, pname, ec);
     370    if (ec) {
     371        V8Proxy::setDOMException(ec);
     372        return v8::Undefined();
     373    }
     374    return toV8(info);
    379375}
    380376
     
    421417{
    422418    INC_STATS("DOM.WebGLRenderingContext.getUniform()");
    423     return getProgramParameter(args, kUniform);
     419
     420    if (args.Length() != 2) {
     421        V8Proxy::setDOMException(SYNTAX_ERR);
     422        return notHandledByInterceptor();
     423    }
     424
     425    ExceptionCode ec = 0;
     426    WebGLRenderingContext* context =
     427        V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
     428    WebGLProgram* program = V8WebGLProgram::HasInstance(args[0]) ? v8DOMWrapperTo<WebGLProgram>(V8ClassIndex::WEBGLPROGRAM, v8::Handle<v8::Object>::Cast(args[0])) : 0;
     429
     430    bool ok = false;
     431    WebGLUniformLocation* location = toWebGLUniformLocation(args[1], ok);
     432
     433    if (!ok) {
     434        V8Proxy::setDOMException(SYNTAX_ERR);
     435        return notHandledByInterceptor();
     436    }
     437    WebGLGetInfo info = context->getUniform(program, location, ec);
     438    if (ec) {
     439        V8Proxy::setDOMException(ec);
     440        return v8::Undefined();
     441    }
     442    return toV8(info);
    424443}
    425444
     
    561580};
    562581
     582bool isFunctionToCallForAttribute(FunctionToCall functionToCall)
     583{
     584    switch (functionToCall) {
     585    case kVertexAttrib1v:
     586    case kVertexAttrib2v:
     587    case kVertexAttrib3v:
     588    case kVertexAttrib4v:
     589        return true;
     590    default:
     591        break;
     592    }
     593    return false;
     594}
     595
    563596static v8::Handle<v8::Value> vertexAttribAndUniformHelperf(const v8::Arguments& args,
    564597                                                           FunctionToCall functionToCall) {
    565598    // Forms:
    566     // * glUniform1fv(GLint location, Array data);
    567     // * glUniform1fv(GLint location, WebGLFloatArray data);
    568     // * glUniform2fv(GLint location, Array data);
    569     // * glUniform2fv(GLint location, WebGLFloatArray data);
    570     // * glUniform3fv(GLint location, Array data);
    571     // * glUniform3fv(GLint location, WebGLFloatArray data);
    572     // * glUniform4fv(GLint location, Array data);
    573     // * glUniform4fv(GLint location, WebGLFloatArray data);
    574     // * glVertexAttrib1fv(GLint location, Array data);
    575     // * glVertexAttrib1fv(GLint location, WebGLFloatArray data);
    576     // * glVertexAttrib2fv(GLint location, Array data);
    577     // * glVertexAttrib2fv(GLint location, WebGLFloatArray data);
    578     // * glVertexAttrib3fv(GLint location, Array data);
    579     // * glVertexAttrib3fv(GLint location, WebGLFloatArray data);
    580     // * glVertexAttrib4fv(GLint location, Array data);
    581     // * glVertexAttrib4fv(GLint location, WebGLFloatArray data);
     599    // * glUniform1fv(WebGLUniformLocation location, Array data);
     600    // * glUniform1fv(WebGLUniformLocation location, WebGLFloatArray data);
     601    // * glUniform2fv(WebGLUniformLocation location, Array data);
     602    // * glUniform2fv(WebGLUniformLocation location, WebGLFloatArray data);
     603    // * glUniform3fv(WebGLUniformLocation location, Array data);
     604    // * glUniform3fv(WebGLUniformLocation location, WebGLFloatArray data);
     605    // * glUniform4fv(WebGLUniformLocation location, Array data);
     606    // * glUniform4fv(WebGLUniformLocation location, WebGLFloatArray data);
     607    // * glVertexAttrib1fv(GLint index, Array data);
     608    // * glVertexAttrib1fv(GLint index, WebGLFloatArray data);
     609    // * glVertexAttrib2fv(GLint index, Array data);
     610    // * glVertexAttrib2fv(GLint index, WebGLFloatArray data);
     611    // * glVertexAttrib3fv(GLint index, Array data);
     612    // * glVertexAttrib3fv(GLint index, WebGLFloatArray data);
     613    // * glVertexAttrib4fv(GLint index, Array data);
     614    // * glVertexAttrib4fv(GLint index, WebGLFloatArray data);
    582615
    583616    if (args.Length() != 3) {
     
    586619    }
    587620
    588     WebGLRenderingContext* context =
    589         V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
    590     bool ok;
    591     int location = toInt32(args[0], ok);
     621    bool ok = false;
     622    int index = -1;
     623    WebGLUniformLocation* location = 0;
     624
     625    if (isFunctionToCallForAttribute(functionToCall))
     626        index = toInt32(args[0], ok);
     627    else
     628        location = toWebGLUniformLocation(args[0], ok);
     629
     630    WebGLRenderingContext* context =
     631        V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
     632
    592633    if (!ok) {
    593634        V8Proxy::setDOMException(SYNTAX_ERR);
     
    603644            case kUniform3v: context->uniform3fv(location, array); break;
    604645            case kUniform4v: context->uniform4fv(location, array); break;
    605             case kVertexAttrib1v: context->vertexAttrib1fv(location, array); break;
    606             case kVertexAttrib2v: context->vertexAttrib2fv(location, array); break;
    607             case kVertexAttrib3v: context->vertexAttrib3fv(location, array); break;
    608             case kVertexAttrib4v: context->vertexAttrib4fv(location, array); break;
     646            case kVertexAttrib1v: context->vertexAttrib1fv(index, array); break;
     647            case kVertexAttrib2v: context->vertexAttrib2fv(index, array); break;
     648            case kVertexAttrib3v: context->vertexAttrib3fv(index, array); break;
     649            case kVertexAttrib4v: context->vertexAttrib4fv(index, array); break;
    609650            default: ASSERT_NOT_REACHED(); break;
    610651        }
     
    630671        case kUniform3v: context->uniform3fv(location, data, len); break;
    631672        case kUniform4v: context->uniform4fv(location, data, len); break;
    632         case kVertexAttrib1v: context->vertexAttrib1fv(location, data, len); break;
    633         case kVertexAttrib2v: context->vertexAttrib2fv(location, data, len); break;
    634         case kVertexAttrib3v: context->vertexAttrib3fv(location, data, len); break;
    635         case kVertexAttrib4v: context->vertexAttrib4fv(location, data, len); break;
     673        case kVertexAttrib1v: context->vertexAttrib1fv(index, data, len); break;
     674        case kVertexAttrib2v: context->vertexAttrib2fv(index, data, len); break;
     675        case kVertexAttrib3v: context->vertexAttrib3fv(index, data, len); break;
     676        case kVertexAttrib4v: context->vertexAttrib4fv(index, data, len); break;
    636677        default: ASSERT_NOT_REACHED(); break;
    637678    }
     
    643684                                            FunctionToCall functionToCall) {
    644685    // Forms:
    645     // * glUniform1iv(GLint location, Array data);
    646     // * glUniform1iv(GLint location, WebGLIntArray data);
    647     // * glUniform2iv(GLint location, Array data);
    648     // * glUniform2iv(GLint location, WebGLIntArray data);
    649     // * glUniform3iv(GLint location, Array data);
    650     // * glUniform3iv(GLint location, WebGLIntArray data);
    651     // * glUniform4iv(GLint location, Array data);
    652     // * glUniform4iv(GLint location, WebGLIntArray data);
     686    // * glUniform1iv(GLUniformLocation location, Array data);
     687    // * glUniform1iv(GLUniformLocation location, WebGLIntArray data);
     688    // * glUniform2iv(GLUniformLocation location, Array data);
     689    // * glUniform2iv(GLUniformLocation location, WebGLIntArray data);
     690    // * glUniform3iv(GLUniformLocation location, Array data);
     691    // * glUniform3iv(GLUniformLocation location, WebGLIntArray data);
     692    // * glUniform4iv(GLUniformLocation location, Array data);
     693    // * glUniform4iv(GLUniformLocation location, WebGLIntArray data);
    653694
    654695    if (args.Length() != 3) {
     
    659700    WebGLRenderingContext* context =
    660701        V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
    661     bool ok;
    662     int location = toInt32(args[0], ok);
     702    bool ok = false;
     703    WebGLUniformLocation* location = toWebGLUniformLocation(args[0], ok);
     704
    663705    if (!ok) {
    664706        V8Proxy::setDOMException(SYNTAX_ERR);
     
    770812    WebGLRenderingContext* context =
    771813        V8DOMWrapper::convertDOMWrapperToNative<WebGLRenderingContext>(args.Holder());
    772     bool ok;
    773     int location = toInt32(args[0], ok);
     814
     815    bool ok = false;
     816    WebGLUniformLocation* location = toWebGLUniformLocation(args[0], ok);
     817   
    774818    if (!ok) {
    775819        V8Proxy::setDOMException(SYNTAX_ERR);
  • trunk/WebCore/html/canvas/WebGLRenderingContext.cpp

    r51588 r51884  
    3737#include "WebGLTexture.h"
    3838#include "WebGLShader.h"
     39#include "WebGLUniformLocation.h"
    3940#include "HTMLCanvasElement.h"
    4041#include "HTMLImageElement.h"
     
    11481149}
    11491150
    1150 WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, long location, ExceptionCode& ec)
    1151 {
    1152     if (!program || program->context() != this) {
     1151WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebGLUniformLocation* uniformLocation, ExceptionCode& ec)
     1152{
     1153    if (!program || uniformLocation->program() != program || program->context() != this) {
    11531154        // FIXME: raise GL_INVALID_VALUE error
    11541155        ec = TYPE_MISMATCH_ERR;
    11551156        return WebGLGetInfo();
    11561157    }
     1158    long location = uniformLocation->location();
     1159   
    11571160    WebGLStateRestorer(this, false);
    11581161    // FIXME: make this more efficient using WebGLUniformLocation and caching types in it
     
    12761279}
    12771280
    1278 long WebGLRenderingContext::getUniformLocation(WebGLProgram* program, const String& name, ExceptionCode& ec)
     1281PassRefPtr<WebGLUniformLocation> WebGLRenderingContext::getUniformLocation(WebGLProgram* program, const String& name, ExceptionCode& ec)
    12791282{
    12801283    if (!program || program->context() != this) {
     
    12821285        return 0;
    12831286    }
    1284     return m_context->getUniformLocation(program, name);
     1287    WebGLStateRestorer(this, false);
     1288    return WebGLUniformLocation::create(program, m_context->getUniformLocation(program, name));
    12851289}
    12861290
     
    16471651}
    16481652
    1649 void WebGLRenderingContext::uniform1f(long location, float x)
    1650 {
    1651     m_context->uniform1f(location, x);
    1652     cleanupAfterGraphicsCall(false);
    1653 }
    1654 
    1655 void WebGLRenderingContext::uniform1fv(long location, WebGLFloatArray* v)
    1656 {
     1653void WebGLRenderingContext::uniform1f(const WebGLUniformLocation* location, float x, ExceptionCode& ec)
     1654{
     1655    if (!location || location->program() != m_currentProgram) {
     1656        // FIXME: raise GL_INVALID_OPERATION error
     1657        ec = TYPE_MISMATCH_ERR;
     1658        return;
     1659    }
     1660
     1661    m_context->uniform1f(location->location(), x);
     1662    cleanupAfterGraphicsCall(false);
     1663}
     1664
     1665void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode& ec)
     1666{
     1667    if (!location || location->program() != m_currentProgram) {
     1668        // FIXME: raise GL_INVALID_OPERATION error
     1669        ec = TYPE_MISMATCH_ERR;
     1670        return;
     1671    }
     1672   
    16571673    // FIXME: we need to throw if no array passed in
    16581674    if (!v)
    16591675        return;
    16601676       
    1661     m_context->uniform1fv(location, v->data(), v->length());
    1662     cleanupAfterGraphicsCall(false);
    1663 }
    1664 
    1665 void WebGLRenderingContext::uniform1fv(long location, float* v, int size)
    1666 {
     1677    m_context->uniform1fv(location->location(), v->data(), v->length());
     1678    cleanupAfterGraphicsCall(false);
     1679}
     1680
     1681void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec)
     1682{
     1683    if (!location || location->program() != m_currentProgram) {
     1684        // FIXME: raise GL_INVALID_OPERATION error
     1685        ec = TYPE_MISMATCH_ERR;
     1686        return;
     1687    }
     1688   
    16671689    // FIXME: we need to throw if no array passed in
    16681690    if (!v)
    16691691        return;
    16701692       
    1671     m_context->uniform1fv(location, v, size);
    1672     cleanupAfterGraphicsCall(false);
    1673 }
    1674 
    1675 void WebGLRenderingContext::uniform1i(long location, int x)
    1676 {
    1677     m_context->uniform1i(location, x);
    1678     cleanupAfterGraphicsCall(false);
    1679 }
    1680 
    1681 void WebGLRenderingContext::uniform1iv(long location, WebGLIntArray* v)
    1682 {
     1693    m_context->uniform1fv(location->location(), v, size);
     1694    cleanupAfterGraphicsCall(false);
     1695}
     1696
     1697void WebGLRenderingContext::uniform1i(const WebGLUniformLocation* location, int x, ExceptionCode& ec)
     1698{
     1699    if (!location || location->program() != m_currentProgram) {
     1700        // FIXME: raise GL_INVALID_OPERATION error
     1701        ec = TYPE_MISMATCH_ERR;
     1702        return;
     1703    }
     1704   
     1705    m_context->uniform1i(location->location(), x);
     1706    cleanupAfterGraphicsCall(false);
     1707}
     1708
     1709void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode& ec)
     1710{
     1711    if (!location || location->program() != m_currentProgram) {
     1712        // FIXME: raise GL_INVALID_OPERATION error
     1713        ec = TYPE_MISMATCH_ERR;
     1714        return;
     1715    }
     1716   
    16831717    // FIXME: we need to throw if no array passed in
    16841718    if (!v)
    16851719        return;
    16861720       
    1687     m_context->uniform1iv(location, v->data(), v->length());
    1688     cleanupAfterGraphicsCall(false);
    1689 }
    1690 
    1691 void WebGLRenderingContext::uniform1iv(long location, int* v, int size)
    1692 {
     1721    m_context->uniform1iv(location->location(), v->data(), v->length());
     1722    cleanupAfterGraphicsCall(false);
     1723}
     1724
     1725void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec)
     1726{
     1727    if (!location || location->program() != m_currentProgram) {
     1728        // FIXME: raise GL_INVALID_OPERATION error
     1729        ec = TYPE_MISMATCH_ERR;
     1730        return;
     1731    }
     1732   
    16931733    // FIXME: we need to throw if no array passed in
    16941734    if (!v)
    16951735        return;
    16961736       
    1697     m_context->uniform1iv(location, v, size);
    1698     cleanupAfterGraphicsCall(false);
    1699 }
    1700 
    1701 void WebGLRenderingContext::uniform2f(long location, float x, float y)
    1702 {
    1703     m_context->uniform2f(location, x, y);
    1704     cleanupAfterGraphicsCall(false);
    1705 }
    1706 
    1707 void WebGLRenderingContext::uniform2fv(long location, WebGLFloatArray* v)
    1708 {
     1737    m_context->uniform1iv(location->location(), v, size);
     1738    cleanupAfterGraphicsCall(false);
     1739}
     1740
     1741void WebGLRenderingContext::uniform2f(const WebGLUniformLocation* location, float x, float y, ExceptionCode& ec)
     1742{
     1743    if (!location || location->program() != m_currentProgram) {
     1744        // FIXME: raise GL_INVALID_OPERATION error
     1745        ec = TYPE_MISMATCH_ERR;
     1746        return;
     1747    }
     1748   
     1749    m_context->uniform2f(location->location(), x, y);
     1750    cleanupAfterGraphicsCall(false);
     1751}
     1752
     1753void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode& ec)
     1754{
     1755    if (!location || location->program() != m_currentProgram) {
     1756        // FIXME: raise GL_INVALID_OPERATION error
     1757        ec = TYPE_MISMATCH_ERR;
     1758        return;
     1759    }
     1760   
    17091761    // FIXME: we need to throw if no array passed in
    17101762    if (!v)
     
    17121764       
    17131765    // FIXME: length needs to be a multiple of 2
    1714     m_context->uniform2fv(location, v->data(), v->length() / 2);
    1715     cleanupAfterGraphicsCall(false);
    1716 }
    1717 
    1718 void WebGLRenderingContext::uniform2fv(long location, float* v, int size)
    1719 {
     1766    m_context->uniform2fv(location->location(), v->data(), v->length() / 2);
     1767    cleanupAfterGraphicsCall(false);
     1768}
     1769
     1770void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec)
     1771{
     1772    if (!location || location->program() != m_currentProgram) {
     1773        // FIXME: raise GL_INVALID_OPERATION error
     1774        ec = TYPE_MISMATCH_ERR;
     1775        return;
     1776    }
     1777   
    17201778    // FIXME: we need to throw if no array passed in
    17211779    if (!v)
     
    17231781       
    17241782    // FIXME: length needs to be a multiple of 2
    1725     m_context->uniform2fv(location, v, size / 2);
    1726     cleanupAfterGraphicsCall(false);
    1727 }
    1728 
    1729 void WebGLRenderingContext::uniform2i(long location, int x, int y)
    1730 {
    1731     m_context->uniform2i(location, x, y);
    1732     cleanupAfterGraphicsCall(false);
    1733 }
    1734 
    1735 void WebGLRenderingContext::uniform2iv(long location, WebGLIntArray* v)
    1736 {
     1783    m_context->uniform2fv(location->location(), v, size / 2);
     1784    cleanupAfterGraphicsCall(false);
     1785}
     1786
     1787void WebGLRenderingContext::uniform2i(const WebGLUniformLocation* location, int x, int y, ExceptionCode& ec)
     1788{
     1789    if (!location || location->program() != m_currentProgram) {
     1790        // FIXME: raise GL_INVALID_OPERATION error
     1791        ec = TYPE_MISMATCH_ERR;
     1792        return;
     1793    }
     1794   
     1795    m_context->uniform2i(location->location(), x, y);
     1796    cleanupAfterGraphicsCall(false);
     1797}
     1798
     1799void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode& ec)
     1800{
     1801    if (!location || location->program() != m_currentProgram) {
     1802        // FIXME: raise GL_INVALID_OPERATION error
     1803        ec = TYPE_MISMATCH_ERR;
     1804        return;
     1805    }
     1806   
    17371807    // FIXME: we need to throw if no array passed in
    17381808    if (!v)
     
    17401810       
    17411811    // FIXME: length needs to be a multiple of 2
    1742     m_context->uniform2iv(location, v->data(), v->length() / 2);
    1743     cleanupAfterGraphicsCall(false);
    1744 }
    1745 
    1746 void WebGLRenderingContext::uniform2iv(long location, int* v, int size)
    1747 {
     1812    m_context->uniform2iv(location->location(), v->data(), v->length() / 2);
     1813    cleanupAfterGraphicsCall(false);
     1814}
     1815
     1816void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec)
     1817{
     1818    if (!location || location->program() != m_currentProgram) {
     1819        // FIXME: raise GL_INVALID_OPERATION error
     1820        ec = TYPE_MISMATCH_ERR;
     1821        return;
     1822    }
     1823   
    17481824    // FIXME: we need to throw if no array passed in
    17491825    if (!v)
     
    17511827       
    17521828    // FIXME: length needs to be a multiple of 2
    1753     m_context->uniform2iv(location, v, size / 2);
    1754     cleanupAfterGraphicsCall(false);
    1755 }
    1756 
    1757 void WebGLRenderingContext::uniform3f(long location, float x, float y, float z)
    1758 {
    1759     m_context->uniform3f(location, x, y, z);
    1760     cleanupAfterGraphicsCall(false);
    1761 }
    1762 
    1763 void WebGLRenderingContext::uniform3fv(long location, WebGLFloatArray* v)
    1764 {
     1829    m_context->uniform2iv(location->location(), v, size / 2);
     1830    cleanupAfterGraphicsCall(false);
     1831}
     1832
     1833void WebGLRenderingContext::uniform3f(const WebGLUniformLocation* location, float x, float y, float z, ExceptionCode& ec)
     1834{
     1835    if (!location || location->program() != m_currentProgram) {
     1836        // FIXME: raise GL_INVALID_OPERATION error
     1837        ec = TYPE_MISMATCH_ERR;
     1838        return;
     1839    }
     1840   
     1841    m_context->uniform3f(location->location(), x, y, z);
     1842    cleanupAfterGraphicsCall(false);
     1843}
     1844
     1845void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode& ec)
     1846{
     1847    if (!location || location->program() != m_currentProgram) {
     1848        // FIXME: raise GL_INVALID_OPERATION error
     1849        ec = TYPE_MISMATCH_ERR;
     1850        return;
     1851    }
     1852   
    17651853    // FIXME: we need to throw if no array passed in
    17661854    if (!v)
     
    17681856       
    17691857    // FIXME: length needs to be a multiple of 3
    1770     m_context->uniform3fv(location, v->data(), v->length() / 3);
    1771     cleanupAfterGraphicsCall(false);
    1772 }
    1773 
    1774 void WebGLRenderingContext::uniform3fv(long location, float* v, int size)
    1775 {
     1858    m_context->uniform3fv(location->location(), v->data(), v->length() / 3);
     1859    cleanupAfterGraphicsCall(false);
     1860}
     1861
     1862void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec)
     1863{
     1864    if (!location || location->program() != m_currentProgram) {
     1865        // FIXME: raise GL_INVALID_OPERATION error
     1866        ec = TYPE_MISMATCH_ERR;
     1867        return;
     1868    }
     1869   
    17761870    // FIXME: we need to throw if no array passed in
    17771871    if (!v)
     
    17791873       
    17801874    // FIXME: length needs to be a multiple of 3
    1781     m_context->uniform3fv(location, v, size / 3);
    1782     cleanupAfterGraphicsCall(false);
    1783 }
    1784 
    1785 void WebGLRenderingContext::uniform3i(long location, int x, int y, int z)
    1786 {
    1787     m_context->uniform3i(location, x, y, z);
    1788     cleanupAfterGraphicsCall(false);
    1789 }
    1790 
    1791 void WebGLRenderingContext::uniform3iv(long location, WebGLIntArray* v)
    1792 {
     1875    m_context->uniform3fv(location->location(), v, size / 3);
     1876    cleanupAfterGraphicsCall(false);
     1877}
     1878
     1879void WebGLRenderingContext::uniform3i(const WebGLUniformLocation* location, int x, int y, int z, ExceptionCode& ec)
     1880{
     1881    if (!location || location->program() != m_currentProgram) {
     1882        // FIXME: raise GL_INVALID_OPERATION error
     1883        ec = TYPE_MISMATCH_ERR;
     1884        return;
     1885    }
     1886   
     1887    m_context->uniform3i(location->location(), x, y, z);
     1888    cleanupAfterGraphicsCall(false);
     1889}
     1890
     1891void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode& ec)
     1892{
     1893    if (!location || location->program() != m_currentProgram) {
     1894        // FIXME: raise GL_INVALID_OPERATION error
     1895        ec = TYPE_MISMATCH_ERR;
     1896        return;
     1897    }
     1898   
    17931899    // FIXME: we need to throw if no array passed in
    17941900    if (!v)
     
    17961902       
    17971903    // FIXME: length needs to be a multiple of 3
    1798     m_context->uniform3iv(location, v->data(), v->length() / 3);
    1799     cleanupAfterGraphicsCall(false);
    1800 }
    1801 
    1802 void WebGLRenderingContext::uniform3iv(long location, int* v, int size)
    1803 {
     1904    m_context->uniform3iv(location->location(), v->data(), v->length() / 3);
     1905    cleanupAfterGraphicsCall(false);
     1906}
     1907
     1908void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec)
     1909{
     1910    if (!location || location->program() != m_currentProgram) {
     1911        // FIXME: raise GL_INVALID_OPERATION error
     1912        ec = TYPE_MISMATCH_ERR;
     1913        return;
     1914    }
     1915   
    18041916    // FIXME: we need to throw if no array passed in
    18051917    if (!v)
     
    18071919       
    18081920    // FIXME: length needs to be a multiple of 3
    1809     m_context->uniform3iv(location, v, size / 3);
    1810     cleanupAfterGraphicsCall(false);
    1811 }
    1812 
    1813 void WebGLRenderingContext::uniform4f(long location, float x, float y, float z, float w)
    1814 {
    1815     m_context->uniform4f(location, x, y, z, w);
    1816     cleanupAfterGraphicsCall(false);
    1817 }
    1818 
    1819 void WebGLRenderingContext::uniform4fv(long location, WebGLFloatArray* v)
    1820 {
     1921    m_context->uniform3iv(location->location(), v, size / 3);
     1922    cleanupAfterGraphicsCall(false);
     1923}
     1924
     1925void WebGLRenderingContext::uniform4f(const WebGLUniformLocation* location, float x, float y, float z, float w, ExceptionCode& ec)
     1926{
     1927    if (!location || location->program() != m_currentProgram) {
     1928        // FIXME: raise GL_INVALID_OPERATION error
     1929        ec = TYPE_MISMATCH_ERR;
     1930        return;
     1931    }
     1932   
     1933    m_context->uniform4f(location->location(), x, y, z, w);
     1934    cleanupAfterGraphicsCall(false);
     1935}
     1936
     1937void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode& ec)
     1938{
     1939    if (!location || location->program() != m_currentProgram) {
     1940        // FIXME: raise GL_INVALID_OPERATION error
     1941        ec = TYPE_MISMATCH_ERR;
     1942        return;
     1943    }
     1944   
    18211945    // FIXME: we need to throw if no array passed in
    18221946    if (!v)
     
    18241948       
    18251949    // FIXME: length needs to be a multiple of 4
    1826     m_context->uniform4fv(location, v->data(), v->length() / 4);
    1827     cleanupAfterGraphicsCall(false);
    1828 }
    1829 
    1830 void WebGLRenderingContext::uniform4fv(long location, float* v, int size)
    1831 {
     1950    m_context->uniform4fv(location->location(), v->data(), v->length() / 4);
     1951    cleanupAfterGraphicsCall(false);
     1952}
     1953
     1954void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec)
     1955{
     1956    if (!location || location->program() != m_currentProgram) {
     1957        // FIXME: raise GL_INVALID_OPERATION error
     1958        ec = TYPE_MISMATCH_ERR;
     1959        return;
     1960    }
     1961   
    18321962    // FIXME: we need to throw if no array passed in
    18331963    if (!v)
     
    18351965       
    18361966    // FIXME: length needs to be a multiple of 4
    1837     m_context->uniform4fv(location, v, size / 4);
    1838     cleanupAfterGraphicsCall(false);
    1839 }
    1840 
    1841 void WebGLRenderingContext::uniform4i(long location, int x, int y, int z, int w)
    1842 {
    1843     m_context->uniform4i(location, x, y, z, w);
    1844     cleanupAfterGraphicsCall(false);
    1845 }
    1846 
    1847 void WebGLRenderingContext::uniform4iv(long location, WebGLIntArray* v)
    1848 {
     1967    m_context->uniform4fv(location->location(), v, size / 4);
     1968    cleanupAfterGraphicsCall(false);
     1969}
     1970
     1971void WebGLRenderingContext::uniform4i(const WebGLUniformLocation* location, int x, int y, int z, int w, ExceptionCode& ec)
     1972{
     1973    if (!location || location->program() != m_currentProgram) {
     1974        // FIXME: raise GL_INVALID_OPERATION error
     1975        ec = TYPE_MISMATCH_ERR;
     1976        return;
     1977    }
     1978   
     1979    m_context->uniform4i(location->location(), x, y, z, w);
     1980    cleanupAfterGraphicsCall(false);
     1981}
     1982
     1983void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode& ec)
     1984{
     1985    if (!location || location->program() != m_currentProgram) {
     1986        // FIXME: raise GL_INVALID_OPERATION error
     1987        ec = TYPE_MISMATCH_ERR;
     1988        return;
     1989    }
     1990   
    18491991    // FIXME: we need to throw if no array passed in
    18501992    if (!v)
     
    18521994       
    18531995    // FIXME: length needs to be a multiple of 4
    1854     m_context->uniform4iv(location, v->data(), v->length() / 4);
    1855     cleanupAfterGraphicsCall(false);
    1856 }
    1857 
    1858 void WebGLRenderingContext::uniform4iv(long location, int* v, int size)
    1859 {
     1996    m_context->uniform4iv(location->location(), v->data(), v->length() / 4);
     1997    cleanupAfterGraphicsCall(false);
     1998}
     1999
     2000void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec)
     2001{
     2002    if (!location || location->program() != m_currentProgram) {
     2003        // FIXME: raise GL_INVALID_OPERATION error
     2004        ec = TYPE_MISMATCH_ERR;
     2005        return;
     2006    }
     2007   
    18602008    // FIXME: we need to throw if no array passed in
    18612009    if (!v)
     
    18632011       
    18642012    // FIXME: length needs to be a multiple of 4
    1865     m_context->uniform4iv(location, v, size / 4);
    1866     cleanupAfterGraphicsCall(false);
    1867 }
    1868 
    1869 void WebGLRenderingContext::uniformMatrix2fv(long location, bool transpose, WebGLFloatArray* v)
    1870 {
     2013    m_context->uniform4iv(location->location(), v, size / 4);
     2014    cleanupAfterGraphicsCall(false);
     2015}
     2016
     2017void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, WebGLFloatArray* v, ExceptionCode& ec)
     2018{
     2019    if (!location || location->program() != m_currentProgram) {
     2020        // FIXME: raise GL_INVALID_OPERATION error
     2021        ec = TYPE_MISMATCH_ERR;
     2022        return;
     2023    }
     2024   
    18712025    // FIXME: we need to throw if no array passed in
    18722026    if (!v)
     
    18742028       
    18752029    // FIXME: length needs to be a multiple of 4
    1876     m_context->uniformMatrix2fv(location, transpose, v->data(), v->length() / 4);
    1877     cleanupAfterGraphicsCall(false);
    1878 }
    1879 
    1880 void WebGLRenderingContext::uniformMatrix2fv(long location, bool transpose, float* v, int size)
    1881 {
     2030    m_context->uniformMatrix2fv(location->location(), transpose, v->data(), v->length() / 4);
     2031    cleanupAfterGraphicsCall(false);
     2032}
     2033
     2034void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, float* v, int size, ExceptionCode& ec)
     2035{
     2036    if (!location || location->program() != m_currentProgram) {
     2037        // FIXME: raise GL_INVALID_OPERATION error
     2038        ec = TYPE_MISMATCH_ERR;
     2039        return;
     2040    }
     2041   
    18822042    // FIXME: we need to throw if no array passed in
    18832043    if (!v)
     
    18852045       
    18862046    // FIXME: length needs to be a multiple of 4
    1887     m_context->uniformMatrix2fv(location, transpose, v, size / 4);
    1888     cleanupAfterGraphicsCall(false);
    1889 }
    1890 
    1891 void WebGLRenderingContext::uniformMatrix3fv(long location, bool transpose, WebGLFloatArray* v)
    1892 {
     2047    m_context->uniformMatrix2fv(location->location(), transpose, v, size / 4);
     2048    cleanupAfterGraphicsCall(false);
     2049}
     2050
     2051void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, WebGLFloatArray* v, ExceptionCode& ec)
     2052{
     2053    if (!location || location->program() != m_currentProgram) {
     2054        // FIXME: raise GL_INVALID_OPERATION error
     2055        ec = TYPE_MISMATCH_ERR;
     2056        return;
     2057    }
     2058   
    18932059    // FIXME: we need to throw if no array passed in
    18942060    if (!v)
     
    18962062       
    18972063    // FIXME: length needs to be a multiple of 9
    1898     m_context->uniformMatrix3fv(location, transpose, v->data(), v->length() / 9);
    1899     cleanupAfterGraphicsCall(false);
    1900 }
    1901 
    1902 void WebGLRenderingContext::uniformMatrix3fv(long location, bool transpose, float* v, int size)
    1903 {
     2064    m_context->uniformMatrix3fv(location->location(), transpose, v->data(), v->length() / 9);
     2065    cleanupAfterGraphicsCall(false);
     2066}
     2067
     2068void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, float* v, int size, ExceptionCode& ec)
     2069{
     2070    if (!location || location->program() != m_currentProgram) {
     2071        // FIXME: raise GL_INVALID_OPERATION error
     2072        ec = TYPE_MISMATCH_ERR;
     2073        return;
     2074    }
     2075   
    19042076    // FIXME: we need to throw if no array passed in
    19052077    if (!v)
     
    19072079       
    19082080    // FIXME: length needs to be a multiple of 9
    1909     m_context->uniformMatrix3fv(location, transpose, v, size / 9);
    1910     cleanupAfterGraphicsCall(false);
    1911 }
    1912 
    1913 void WebGLRenderingContext::uniformMatrix4fv(long location, bool transpose, WebGLFloatArray* v)
    1914 {
     2081    m_context->uniformMatrix3fv(location->location(), transpose, v, size / 9);
     2082    cleanupAfterGraphicsCall(false);
     2083}
     2084
     2085void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, WebGLFloatArray* v, ExceptionCode& ec)
     2086{
     2087    if (!location || location->program() != m_currentProgram) {
     2088        // FIXME: raise GL_INVALID_OPERATION error
     2089        ec = TYPE_MISMATCH_ERR;
     2090        return;
     2091    }
     2092   
    19152093    // FIXME: we need to throw if no array passed in
    19162094    if (!v)
     
    19182096       
    19192097    // FIXME: length needs to be a multiple of 16
    1920     m_context->uniformMatrix4fv(location, transpose, v->data(), v->length() / 16);
    1921     cleanupAfterGraphicsCall(false);
    1922 }
    1923 
    1924 void WebGLRenderingContext::uniformMatrix4fv(long location, bool transpose, float* v, int size)
    1925 {
     2098    m_context->uniformMatrix4fv(location->location(), transpose, v->data(), v->length() / 16);
     2099    cleanupAfterGraphicsCall(false);
     2100}
     2101
     2102void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, float* v, int size, ExceptionCode& ec)
     2103{
     2104    if (!location || location->program() != m_currentProgram) {
     2105        // FIXME: raise GL_INVALID_OPERATION error
     2106        ec = TYPE_MISMATCH_ERR;
     2107        return;
     2108    }
     2109   
    19262110    // FIXME: we need to throw if no array passed in
    19272111    if (!v)
     
    19292113       
    19302114    // FIXME: length needs to be a multiple of 16
    1931     m_context->uniformMatrix4fv(location, transpose, v, size / 16);
     2115    m_context->uniformMatrix4fv(location->location(), transpose, v, size / 16);
    19322116    cleanupAfterGraphicsCall(false);
    19332117}
  • trunk/WebCore/html/canvas/WebGLRenderingContext.h

    r51370 r51884  
    4646class WebGLShader;
    4747class WebGLTexture;
     48class WebGLUniformLocation;
    4849class HTMLImageElement;
    4950class HTMLVideoElement;
     
    158159        WebGLGetInfo getTexParameter(unsigned long target, unsigned long pname, ExceptionCode&);
    159160
    160         WebGLGetInfo getUniform(WebGLProgram* program, long location, ExceptionCode& ec);
    161 
    162         long getUniformLocation(WebGLProgram*, const String& name, ExceptionCode&);
     161        WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*, ExceptionCode&);
     162
     163        PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&, ExceptionCode&);
    163164
    164165        WebGLGetInfo getVertexAttrib(unsigned long index, unsigned long pname, ExceptionCode&);
     
    225226                           bool flipY, bool premultiplyAlpha, ExceptionCode&);
    226227
    227         void uniform1f(long location, float x);
    228         void uniform1fv(long location, WebGLFloatArray* v);
    229         void uniform1fv(long location, float* v, int size);
    230         void uniform1i(long location, int x);
    231         void uniform1iv(long location, WebGLIntArray* v);
    232         void uniform1iv(long location, int* v, int size);
    233         void uniform2f(long location, float x, float y);
    234         void uniform2fv(long location, WebGLFloatArray* v);
    235         void uniform2fv(long location, float* v, int size);
    236         void uniform2i(long location, int x, int y);
    237         void uniform2iv(long location, WebGLIntArray* v);
    238         void uniform2iv(long location, int* v, int size);
    239         void uniform3f(long location, float x, float y, float z);
    240         void uniform3fv(long location, WebGLFloatArray* v);
    241         void uniform3fv(long location, float* v, int size);
    242         void uniform3i(long location, int x, int y, int z);
    243         void uniform3iv(long location, WebGLIntArray* v);
    244         void uniform3iv(long location, int* v, int size);
    245         void uniform4f(long location, float x, float y, float z, float w);
    246         void uniform4fv(long location, WebGLFloatArray* v);
    247         void uniform4fv(long location, float* v, int size);
    248         void uniform4i(long location, int x, int y, int z, int w);
    249         void uniform4iv(long location, WebGLIntArray* v);
    250         void uniform4iv(long location, int* v, int size);
    251         void uniformMatrix2fv(long location, bool transpose, WebGLFloatArray* value);
    252         void uniformMatrix2fv(long location, bool transpose, float* value, int size);
    253         void uniformMatrix3fv(long location, bool transpose, WebGLFloatArray* value);
    254         void uniformMatrix3fv(long location, bool transpose, float* value, int size);
    255         void uniformMatrix4fv(long location, bool transpose, WebGLFloatArray* value);
    256         void uniformMatrix4fv(long location, bool transpose, float* value, int size);
     228        void uniform1f(const WebGLUniformLocation* location, float x, ExceptionCode&);
     229        void uniform1fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode&);
     230        void uniform1fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
     231        void uniform1i(const WebGLUniformLocation* location, int x, ExceptionCode&);
     232        void uniform1iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode&);
     233        void uniform1iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
     234        void uniform2f(const WebGLUniformLocation* location, float x, float y, ExceptionCode&);
     235        void uniform2fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode&);
     236        void uniform2fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
     237        void uniform2i(const WebGLUniformLocation* location, int x, int y, ExceptionCode&);
     238        void uniform2iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode&);
     239        void uniform2iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
     240        void uniform3f(const WebGLUniformLocation* location, float x, float y, float z, ExceptionCode&);
     241        void uniform3fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode&);
     242        void uniform3fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
     243        void uniform3i(const WebGLUniformLocation* location, int x, int y, int z, ExceptionCode&);
     244        void uniform3iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode&);
     245        void uniform3iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
     246        void uniform4f(const WebGLUniformLocation* location, float x, float y, float z, float w, ExceptionCode&);
     247        void uniform4fv(const WebGLUniformLocation* location, WebGLFloatArray* v, ExceptionCode&);
     248        void uniform4fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
     249        void uniform4i(const WebGLUniformLocation* location, int x, int y, int z, int w, ExceptionCode&);
     250        void uniform4iv(const WebGLUniformLocation* location, WebGLIntArray* v, ExceptionCode&);
     251        void uniform4iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
     252        void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, WebGLFloatArray* value, ExceptionCode&);
     253        void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
     254        void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, WebGLFloatArray* value, ExceptionCode&);
     255        void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
     256        void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, WebGLFloatArray* value, ExceptionCode&);
     257        void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
    257258
    258259        void useProgram(WebGLProgram*, ExceptionCode&);
  • trunk/WebCore/html/canvas/WebGLRenderingContext.idl

    r51370 r51884  
    568568        [Custom] void getTexParameter();
    569569
    570         // any getUniform(in WebGLProgram program, in long location) raises(DOMException);
     570        // any getUniform(in WebGLProgram program, in WebGLUniformLocation location) raises(DOMException);
    571571        [Custom] void getUniform();
    572        
    573         long getUniformLocation(in WebGLProgram program, in DOMString name) raises(DOMException);
     572
     573        WebGLUniformLocation getUniformLocation(in WebGLProgram program, in DOMString name) raises(DOMException);
    574574
    575575        // any getVertexAttrib(in unsigned long index, in unsigned long pname) raises(DOMException);
     
    639639        [Custom] void texSubImage2D();
    640640
    641         void uniform1f(in long location, in float x);
    642         [Custom] void uniform1fv(in long location, in WebGLFloatArray v);
    643         void uniform1i(in long location, in long x);
    644         [Custom] void uniform1iv(in long location, in WebGLIntArray v);
    645         void uniform2f(in long location, in float x, in float y);
    646         [Custom] void uniform2fv(in long location, in WebGLFloatArray v);
    647         void uniform2i(in long location, in long x, in long y);
    648         [Custom] void uniform2iv(in long location, in WebGLIntArray v);
    649         void uniform3f(in long location, in float x, in float y, in float z);
    650         [Custom] void uniform3fv(in long location, in WebGLFloatArray v);
    651         void uniform3i(in long location, in long x, in long y, in long z);
    652         [Custom] void uniform3iv(in long location, in WebGLIntArray v);
    653         void uniform4f(in long location, in float x, in float y, in float z, in float w);
    654         [Custom] void uniform4fv(in long location, in WebGLFloatArray v);
    655         void uniform4i(in long location, in long x, in long y, in long z, in long w);
    656         [Custom] void uniform4iv(in long location, in WebGLIntArray v);
    657 
    658         [Custom] void uniformMatrix2fv(in long location, in boolean transpose, in WebGLFloatArray array);
    659         [Custom] void uniformMatrix3fv(in long location, in boolean transpose, in WebGLFloatArray array);
    660         [Custom] void uniformMatrix4fv(in long location, in boolean transpose, in WebGLFloatArray array);
     641        void uniform1f(in WebGLUniformLocation location, in float x) raises(DOMException);
     642        [Custom] void uniform1fv(in WebGLUniformLocation location, in WebGLFloatArray v) raises(DOMException);
     643        void uniform1i(in WebGLUniformLocation location, in long x) raises(DOMException);
     644        [Custom] void uniform1iv(in WebGLUniformLocation location, in WebGLIntArray v) raises(DOMException);
     645        void uniform2f(in WebGLUniformLocation location, in float x, in float y) raises(DOMException);
     646        [Custom] void uniform2fv(in WebGLUniformLocation location, in WebGLFloatArray v) raises(DOMException);
     647        void uniform2i(in WebGLUniformLocation location, in long x, in long y) raises(DOMException);
     648        [Custom] void uniform2iv(in WebGLUniformLocation location, in WebGLIntArray v) raises(DOMException);
     649        void uniform3f(in WebGLUniformLocation location, in float x, in float y, in float z) raises(DOMException);
     650        [Custom] void uniform3fv(in WebGLUniformLocation location, in WebGLFloatArray v) raises(DOMException);
     651        void uniform3i(in WebGLUniformLocation location, in long x, in long y, in long z) raises(DOMException);
     652        [Custom] void uniform3iv(in WebGLUniformLocation location, in WebGLIntArray v) raises(DOMException);
     653        void uniform4f(in WebGLUniformLocation location, in float x, in float y, in float z, in float w) raises(DOMException);
     654        [Custom] void uniform4fv(in WebGLUniformLocation location, in WebGLFloatArray v) raises(DOMException);
     655        void uniform4i(in WebGLUniformLocation location, in long x, in long y, in long z, in long w) raises(DOMException);
     656        [Custom] void uniform4iv(in WebGLUniformLocation location, in WebGLIntArray v) raises(DOMException);
     657
     658        [Custom] void uniformMatrix2fv(in WebGLUniformLocation location, in boolean transpose, in WebGLFloatArray array) raises(DOMException);
     659        [Custom] void uniformMatrix3fv(in WebGLUniformLocation location, in boolean transpose, in WebGLFloatArray array) raises(DOMException);
     660        [Custom] void uniformMatrix4fv(in WebGLUniformLocation location, in boolean transpose, in WebGLFloatArray array) raises(DOMException);
    661661
    662662        void         useProgram(in WebGLProgram program) raises(DOMException);
Note: See TracChangeset for help on using the changeset viewer.