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

Unified Diff: Source/WebCore/bindings/dart/custom/DartWebGLRenderingContextCustom.cpp

Issue 9231022: WebGL support. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Created 8 years, 11 months 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 side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/bindings/dart/custom/DartWebGLRenderingContextCustom.cpp
diff --git a/Source/WebCore/bindings/dart/custom/DartWebGLRenderingContextCustom.cpp b/Source/WebCore/bindings/dart/custom/DartWebGLRenderingContextCustom.cpp
index b8f74a299519d963314a2fb4aa2cb4646b7be043..4c22da7bca43da5d224db0b8404365fec41c32c8 100644
--- a/Source/WebCore/bindings/dart/custom/DartWebGLRenderingContextCustom.cpp
+++ b/Source/WebCore/bindings/dart/custom/DartWebGLRenderingContextCustom.cpp
@@ -32,170 +32,713 @@
#if ENABLE(WEBGL)
+#include "DartArrayBufferView.h"
+#include "DartDOMWrapper.h"
+#include "DartFloat32Array.h"
+#include "DartHTMLCanvasElement.h"
+#include "DartHTMLImageElement.h"
+#include "DartHTMLVideoElement.h"
+#include "DartImageData.h"
+#include "DartInt16Array.h"
+#include "DartInt32Array.h"
+#include "DartInt8Array.h"
+#include "DartOESStandardDerivatives.h"
+#include "DartOESTextureFloat.h"
+#include "DartOESVertexArrayObject.h"
+#include "DartUint16Array.h"
+#include "DartUint32Array.h"
+#include "DartUint8Array.h"
+#include "DartWebGLBuffer.h"
+#include "DartWebGLDebugRendererInfo.h"
+#include "DartWebGLDebugShaders.h"
+#include "DartWebGLFramebuffer.h"
+#include "DartWebGLLoseContext.h"
+#include "DartWebGLProgram.h"
+#include "DartWebGLRenderbuffer.h"
+#include "DartWebGLShader.h"
+#include "DartWebGLTexture.h"
+#include "DartWebGLUniformLocation.h"
+#include "DartWebGLVertexArrayObjectOES.h"
+#include "ExceptionCode.h"
+#include "NotImplemented.h"
+#include "WebGLRenderingContext.h"
+
+#include <limits>
+#include <wtf/FastMalloc.h>
+
namespace WebCore {
namespace DartWebGLRenderingContextInternal {
-void getAttachedShadersCallback(Dart_NativeArguments)
+static Dart_Handle toDartValueInternal(WebGLExtension* extension)
+{
+ if (!extension)
+ return 0;
+ switch (extension->getName()) {
+ case WebGLExtension::WebKitWebGLLoseContextName:
+ return toDartValue(static_cast<WebGLLoseContext*>(extension));
+ case WebGLExtension::OESStandardDerivativesName:
+ return toDartValue(static_cast<OESStandardDerivatives*>(extension));
+ case WebGLExtension::OESTextureFloatName:
+ return toDartValue(static_cast<OESTextureFloat*>(extension));
+ case WebGLExtension::OESVertexArrayObjectName:
+ return toDartValue(static_cast<OESVertexArrayObject*>(extension));
+ case WebGLExtension::WebGLDebugRendererInfoName:
+ return toDartValue(static_cast<WebGLDebugRendererInfo*>(extension));
+ case WebGLExtension::WebGLDebugShadersName:
+ return toDartValue(static_cast<WebGLDebugShaders*>(extension));
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+}
+
+static Dart_Handle toDartValueInternal(const WebGLGetInfo& info)
+{
+ switch (info.getType()) {
+ case WebGLGetInfo::kTypeBool:
+ return toDartValue(info.getBool());
+ case WebGLGetInfo::kTypeBoolArray:
+ return DartUtilities::vectorToDartList(info.getBoolArray());
+ case WebGLGetInfo::kTypeFloat:
+ return toDartValue(info.getFloat());
+ case WebGLGetInfo::kTypeInt:
+ return toDartValue(info.getInt());
+ case WebGLGetInfo::kTypeNull:
+ return 0;
+ case WebGLGetInfo::kTypeString:
+ return toDartValue(info.getString());
+ case WebGLGetInfo::kTypeUnsignedInt:
+ return toDartValue(static_cast<intptr_t>(info.getUnsignedInt()));
+ case WebGLGetInfo::kTypeWebGLBuffer:
+ return toDartValue(info.getWebGLBuffer());
+ case WebGLGetInfo::kTypeWebGLFloatArray:
+ return toDartValue(info.getWebGLFloatArray());
+ case WebGLGetInfo::kTypeWebGLFramebuffer:
+ return toDartValue(info.getWebGLFramebuffer());
+ case WebGLGetInfo::kTypeWebGLIntArray:
+ return toDartValue(info.getWebGLIntArray());
+ // FIXME: implement WebGLObjectArray
+ // case WebGLGetInfo::kTypeWebGLObjectArray:
+ case WebGLGetInfo::kTypeWebGLProgram:
+ return toDartValue(info.getWebGLProgram());
+ case WebGLGetInfo::kTypeWebGLRenderbuffer:
+ return toDartValue(info.getWebGLRenderbuffer());
+ case WebGLGetInfo::kTypeWebGLTexture:
+ return toDartValue(info.getWebGLTexture());
+ case WebGLGetInfo::kTypeWebGLUnsignedByteArray:
+ return toDartValue(info.getWebGLUnsignedByteArray());
+ case WebGLGetInfo::kTypeWebGLVertexArrayObjectOES:
+ return toDartValue(info.getWebGLVertexArrayObjectOES());
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+}
+
+enum ObjectType {
+ kBuffer, kRenderbuffer, kTexture, kVertexAttrib
+};
+
+static void getObjectParameter(Dart_NativeArguments args, ObjectType objectType)
+{
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ ExceptionCode ec = 0;
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<int> target(Dart_GetNativeArgument(args, 1));
+ if (!target.conversionSuccessful()) {
+ exception = target.exception();
+ goto fail;
+ }
+ const ParameterAdapter<int> pname(Dart_GetNativeArgument(args, 2));
+ if (!pname.conversionSuccessful()) {
+ exception = pname.exception();
+ goto fail;
+ }
+
+ WebGLGetInfo info;
+ switch (objectType) {
+ case kBuffer:
+ info = context->getBufferParameter(target, pname, ec);
+ break;
+ case kRenderbuffer:
+ info = context->getRenderbufferParameter(target, pname, ec);
+ break;
+ case kTexture:
+ info = context->getTexParameter(target, pname, ec);
+ break;
+ case kVertexAttrib:
+ // target => index
+ info = context->getVertexAttrib(target, pname, ec);
+ break;
+ default:
+ notImplemented();
+ break;
+ }
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ Dart_Handle result = toDartValueInternal(info);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
+}
+
+void getAttachedShadersCallback(Dart_NativeArguments args)
+{
+ DartApiScope dartApiScope;
+ Dart_Handle exception = 0;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<RefPtr<WebGLProgram>, DartWebGLProgram> program(Dart_GetNativeArgument(args, 1));
+ if (!program.conversionSuccessful()) {
+ exception = program.exception();
+ goto fail;
+ }
+
+ Vector<RefPtr<WebGLShader> > shaders;
+ ExceptionCode ec = 0;
+ bool succeed = context->getAttachedShaders(program, shaders, ec);
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ Dart_Handle result;
+ if (succeed) {
+ result = DartUtilities::vectorToDartList(shaders);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+ } else
+ result = 0;
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
+}
+
+void getBufferParameterCallback(Dart_NativeArguments args)
+{
+ getObjectParameter(args, kBuffer);
+}
+
+void getExtensionCallback(Dart_NativeArguments args)
+{
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<String> name(Dart_GetNativeArgument(args, 1));
+ if (!name.conversionSuccessful()) {
+ exception = name.exception();
+ goto fail;
+ }
+
+ WebGLExtension* extension = context->getExtension(name);
+ Dart_Handle result = toDartValueInternal(extension);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
+}
+
+void getFramebufferAttachmentParameterCallback(Dart_NativeArguments args)
+{
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<int> target(Dart_GetNativeArgument(args, 1));
+ if (!target.conversionSuccessful()) {
+ exception = target.exception();
+ goto fail;
+ }
+ const ParameterAdapter<int> attachment(Dart_GetNativeArgument(args, 2));
+ if (!attachment.conversionSuccessful()) {
+ exception = attachment.exception();
+ goto fail;
+ }
+ const ParameterAdapter<int> pname(Dart_GetNativeArgument(args, 3));
+ if (!pname.conversionSuccessful()) {
+ exception = pname.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ WebGLGetInfo info = context->getFramebufferAttachmentParameter(target, attachment, pname, ec);
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ Dart_Handle result = toDartValueInternal(info);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
+}
+
+void getParameterCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception = 0;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<int> pname(Dart_GetNativeArgument(args, 1));
+ if (!pname.conversionSuccessful()) {
+ exception = pname.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ WebGLGetInfo info = context->getParameter(pname, ec);
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ Dart_Handle result = toDartValueInternal(info);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void getBufferParameterCallback(Dart_NativeArguments)
+void getProgramParameterCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<WebGLProgram, DartWebGLProgram> program(Dart_GetNativeArgument(args, 1));
+ if (!program.conversionSuccessful()) {
+ exception = program.exception();
+ goto fail;
+ }
+ const ParameterAdapter<int> pname(Dart_GetNativeArgument(args, 2));
+ if (!pname.conversionSuccessful()) {
+ exception = pname.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ WebGLGetInfo info = context->getProgramParameter(program, pname, ec);
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ Dart_Handle result = toDartValueInternal(info);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void getExtensionCallback(Dart_NativeArguments)
+void getRenderbufferParameterCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ getObjectParameter(args, kRenderbuffer);
}
-void getFramebufferAttachmentParameterCallback(Dart_NativeArguments)
+void getShaderParameterCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<WebGLShader, DartWebGLShader> shader(Dart_GetNativeArgument(args, 1));
+ if (!shader.conversionSuccessful()) {
+ exception = shader.exception();
+ goto fail;
+ }
+ const ParameterAdapter<int> pname(Dart_GetNativeArgument(args, 2));
+ if (!pname.conversionSuccessful()) {
+ exception = pname.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ WebGLGetInfo info = context->getShaderParameter(shader, pname, ec);
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ Dart_Handle result = toDartValueInternal(info);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void getParameterCallback(Dart_NativeArguments)
+void getSupportedExtensionsCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception = 0;
+ {
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ Vector<String> value = context->getSupportedExtensions();
+ Dart_Handle result = DartUtilities::vectorToDartList(value);
+ if (!DartUtilities::checkResult(result, exception))
+ goto fail;
+
+ Dart_SetReturnValue(args, result);
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void getProgramParameterCallback(Dart_NativeArguments)
+void getTexParameterCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ getObjectParameter(args, kTexture);
}
-void getRenderbufferParameterCallback(Dart_NativeArguments)
+void getUniformCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ getObjectParameter(args, kVertexAttrib);
}
-void getShaderParameterCallback(Dart_NativeArguments)
+void getVertexAttribCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ getObjectParameter(args, kVertexAttrib);
}
-void getSupportedExtensionsCallback(Dart_NativeArguments)
+enum FunctionToCall {
+ kUniform1v, kUniform2v, kUniform3v, kUniform4v,
+ kVertexAttrib1v, kVertexAttrib2v, kVertexAttrib3v, kVertexAttrib4v
+};
+
+static inline bool isFunctionToCallForAttribute(FunctionToCall functionToCall)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ switch (functionToCall) {
+ case kVertexAttrib1v:
+ case kVertexAttrib2v:
+ case kVertexAttrib3v:
+ case kVertexAttrib4v:
+ return true;
+ default:
+ break;
+ }
+ return false;
}
-void getTexParameterCallback(Dart_NativeArguments)
+static void vertexAttribAndUniformHelperf(Dart_NativeArguments args, FunctionToCall functionToCall)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ // Forms:
+ // * glUniform1fv(WebGLUniformLocation location, Array data);
+ // * glUniform1fv(WebGLUniformLocation location, Float32Array data);
+ // * glUniform2fv(WebGLUniformLocation location, Array data);
+ // * glUniform2fv(WebGLUniformLocation location, Float32Array data);
+ // * glUniform3fv(WebGLUniformLocation location, Array data);
+ // * glUniform3fv(WebGLUniformLocation location, Float32Array data);
+ // * glUniform4fv(WebGLUniformLocation location, Array data);
+ // * glUniform4fv(WebGLUniformLocation location, Float32Array data);
+ // * glVertexAttrib1fv(GLint index, Array data);
+ // * glVertexAttrib1fv(GLint index, Float32Array data);
+ // * glVertexAttrib2fv(GLint index, Array data);
+ // * glVertexAttrib2fv(GLint index, Float32Array data);
+ // * glVertexAttrib3fv(GLint index, Array data);
+ // * glVertexAttrib3fv(GLint index, Float32Array data);
+ // * glVertexAttrib4fv(GLint index, Array data);
+ // * glVertexAttrib4fv(GLint index, Float32Array data);
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ int index = -1;
+ WebGLUniformLocation* location = 0;
+
+ if (isFunctionToCallForAttribute(functionToCall)) {
+ const ParameterAdapter<int> indexParam(Dart_GetNativeArgument(args, 1));
+ if (!indexParam.conversionSuccessful()) {
+ exception = indexParam.exception();
+ goto fail;
+ }
+ index = indexParam;
+ } else {
+ const ParameterAdapter<WebGLUniformLocation, DartWebGLUniformLocation> locationParam(Dart_GetNativeArgument(args, 1));
+ if (!locationParam.conversionSuccessful()) {
+ exception = locationParam.exception();
+ goto fail;
+ }
+ location = locationParam;
+ }
+
+ // FIXME: process Dart lists as parameters
antonm 2012/01/18 15:12:23 nit: trailing dot is missing.
Nikolay 2012/01/19 13:27:34 Done.
+ const ParameterAdapter<Float32Array, DartFloat32Array> array(Dart_GetNativeArgument(args, 2));
+ if (!array.conversionSuccessful()) {
+ exception = array.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ switch (functionToCall) {
+ case kUniform1v:
+ context->uniform1fv(location, array, ec);
+ break;
+ case kUniform2v:
+ context->uniform2fv(location, array, ec);
+ break;
+ case kUniform3v:
+ context->uniform3fv(location, array, ec);
+ break;
+ case kUniform4v:
+ context->uniform4fv(location, array, ec);
+ break;
+ case kVertexAttrib1v:
+ context->vertexAttrib1fv(index, array);
+ break;
+ case kVertexAttrib2v:
+ context->vertexAttrib2fv(index, array);
+ break;
+ case kVertexAttrib3v:
+ context->vertexAttrib3fv(index, array);
+ break;
+ case kVertexAttrib4v:
+ context->vertexAttrib4fv(index, array);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void getUniformCallback(Dart_NativeArguments)
+static void uniformHelperi(Dart_NativeArguments args, FunctionToCall functionToCall)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ // Forms:
+ // * glUniform1iv(GLUniformLocation location, Array data);
+ // * glUniform1iv(GLUniformLocation location, Int32Array data);
+ // * glUniform2iv(GLUniformLocation location, Array data);
+ // * glUniform2iv(GLUniformLocation location, Int32Array data);
+ // * glUniform3iv(GLUniformLocation location, Array data);
+ // * glUniform3iv(GLUniformLocation location, Int32Array data);
+ // * glUniform4iv(GLUniformLocation location, Array data);
+ // * glUniform4iv(GLUniformLocation location, Int32Array data);
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<WebGLUniformLocation, DartWebGLUniformLocation> location(Dart_GetNativeArgument(args, 1));
+ if (!location.conversionSuccessful()) {
+ exception = location.exception();
+ goto fail;
+ }
+ const ParameterAdapter<Int32Array, DartInt32Array> array(Dart_GetNativeArgument(args, 2));
+ // FIXME: maybe process Dart lists ars parameters too?
+ if (!array.conversionSuccessful()) {
+ exception = array.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ switch (functionToCall) {
+ case kUniform1v:
+ context->uniform1iv(location, array, ec);
+ break;
+ case kUniform2v:
+ context->uniform2iv(location, array, ec);
+ break;
+ case kUniform3v:
+ context->uniform3iv(location, array, ec);
+ break;
+ case kUniform4v:
+ context->uniform4iv(location, array, ec);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void getVertexAttribCallback(Dart_NativeArguments)
+static void uniformMatrixHelper(Dart_NativeArguments args, int matrixSize)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ DartApiScope dartApiScope;
+ Dart_Handle exception;
+ {
+ // Forms:
+ // * glUniformMatrix2fv(GLint location, GLboolean transpose, Array data);
+ // * glUniformMatrix2fv(GLint location, GLboolean transpose, Float32Array data);
+ // * glUniformMatrix3fv(GLint location, GLboolean transpose, Array data);
+ // * glUniformMatrix3fv(GLint location, GLboolean transpose, Float32Array data);
+ // * glUniformMatrix4fv(GLint location, GLboolean transpose, Array data);
+ // * glUniformMatrix4fv(GLint location, GLboolean transpose, Float32Array data);
+ //
+ WebGLRenderingContext* context = DartDOMWrapper::receiver<WebGLRenderingContext>(args);
+ const ParameterAdapter<WebGLUniformLocation, DartWebGLUniformLocation> location(Dart_GetNativeArgument(args, 1));
+ if (!location.conversionSuccessful()) {
+ exception = location.exception();
+ goto fail;
+ }
+ const ParameterAdapter<bool> transpose(Dart_GetNativeArgument(args, 2));
+ if (!transpose.conversionSuccessful()) {
+ exception = transpose.exception();
+ goto fail;
+ }
+ const ParameterAdapter<Float32Array, DartFloat32Array> array(Dart_GetNativeArgument(args, 3));
+ if (!array.conversionSuccessful()) {
+ exception = array.exception();
+ goto fail;
+ }
+
+ ExceptionCode ec = 0;
+ switch (matrixSize) {
+ case 2:
+ context->uniformMatrix2fv(location, transpose, array, ec);
+ break;
+ case 3:
+ context->uniformMatrix3fv(location, transpose, array, ec);
+ break;
+ case 4:
+ context->uniformMatrix4fv(location, transpose, array, ec);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+ if (UNLIKELY(ec)) {
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec);
+ goto fail;
+ }
+ return;
+ }
+
+fail:
+ Dart_ThrowException(exception);
+ ASSERT_NOT_REACHED();
}
-void uniform1fvCallback(Dart_NativeArguments)
+void uniform1fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kUniform1v);
}
-void uniform1ivCallback(Dart_NativeArguments)
+void uniform1ivCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformHelperi(args, kUniform1v);
}
-void uniform2fvCallback(Dart_NativeArguments)
+void uniform2fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kUniform2v);
}
-void uniform2ivCallback(Dart_NativeArguments)
+void uniform2ivCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformHelperi(args, kUniform2v);
}
-void uniform3fvCallback(Dart_NativeArguments)
+void uniform3fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kUniform3v);
}
-void uniform3ivCallback(Dart_NativeArguments)
+void uniform3ivCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformHelperi(args, kUniform3v);
}
-void uniform4fvCallback(Dart_NativeArguments)
+void uniform4fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kUniform4v);
}
-void uniform4ivCallback(Dart_NativeArguments)
+void uniform4ivCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformHelperi(args, kUniform4v);
}
-void uniformMatrix2fvCallback(Dart_NativeArguments)
+void uniformMatrix2fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformMatrixHelper(args, 2);
}
-void uniformMatrix3fvCallback(Dart_NativeArguments)
+void uniformMatrix3fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformMatrixHelper(args, 3);
}
-void uniformMatrix4fvCallback(Dart_NativeArguments)
+void uniformMatrix4fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ uniformMatrixHelper(args, 4);
}
-void vertexAttrib1fvCallback(Dart_NativeArguments)
+void vertexAttrib1fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kVertexAttrib1v);
}
-void vertexAttrib2fvCallback(Dart_NativeArguments)
+void vertexAttrib2fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kVertexAttrib2v);
}
-void vertexAttrib3fvCallback(Dart_NativeArguments)
+void vertexAttrib3fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kVertexAttrib3v);
}
-void vertexAttrib4fvCallback(Dart_NativeArguments)
+void vertexAttrib4fvCallback(Dart_NativeArguments args)
{
- // FIXME: proper implementation.
- DART_UNIMPLEMENTED();
+ vertexAttribAndUniformHelperf(args, kVertexAttrib4v);
}
}

Powered by Google App Engine
This is Rietveld 408576698