| Index: Source/core/html/canvas/WebGLFramebuffer.cpp
|
| diff --git a/Source/core/html/canvas/WebGLFramebuffer.cpp b/Source/core/html/canvas/WebGLFramebuffer.cpp
|
| index 73614b5e8cd4665b695e61604a8f8eda29f7227e..7ab97df91d1f01015d77cdeaa3f65dfb2dbdf1dd 100644
|
| --- a/Source/core/html/canvas/WebGLFramebuffer.cpp
|
| +++ b/Source/core/html/canvas/WebGLFramebuffer.cpp
|
| @@ -87,9 +87,9 @@ namespace {
|
| GC3Denum WebGLRenderbufferAttachment::format() const
|
| {
|
| GC3Denum format = m_renderbuffer->internalFormat();
|
| - if (format == GraphicsContext3D::DEPTH_STENCIL
|
| + if (format == GL_DEPTH_STENCIL_OES
|
| && m_renderbuffer->emulatedStencilBuffer()
|
| - && m_renderbuffer->emulatedStencilBuffer()->internalFormat() != GraphicsContext3D::STENCIL_INDEX8) {
|
| + && m_renderbuffer->emulatedStencilBuffer()->internalFormat() != GL_STENCIL_INDEX8) {
|
| return 0;
|
| }
|
| return format;
|
| @@ -129,21 +129,22 @@ namespace {
|
| void WebGLRenderbufferAttachment::attach(GraphicsContext3D* context, GC3Denum attachment)
|
| {
|
| Platform3DObject object = objectOrZero(m_renderbuffer.get());
|
| - if (attachment == GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT && m_renderbuffer->emulatedStencilBuffer()) {
|
| - context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, object);
|
| - context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, objectOrZero(m_renderbuffer->emulatedStencilBuffer()));
|
| + if (attachment == GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL && m_renderbuffer->emulatedStencilBuffer()) {
|
| + context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, object);
|
| + context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, objectOrZero(m_renderbuffer->emulatedStencilBuffer()));
|
| } else {
|
| - context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, attachment, GraphicsContext3D::RENDERBUFFER, object);
|
| + context->framebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, object);
|
| }
|
| }
|
|
|
| void WebGLRenderbufferAttachment::unattach(GraphicsContext3D* context, GC3Denum attachment)
|
| {
|
| - if (attachment == GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT) {
|
| - context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, 0);
|
| - context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, 0);
|
| - } else
|
| - context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, attachment, GraphicsContext3D::RENDERBUFFER, 0);
|
| + if (attachment == GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL) {
|
| + context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
|
| + context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
|
| + } else {
|
| + context->framebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, 0);
|
| + }
|
| }
|
|
|
| GC3Denum WebGLRenderbufferAttachment::type() const
|
| @@ -239,16 +240,17 @@ namespace {
|
| void WebGLTextureAttachment::attach(GraphicsContext3D* context, GC3Denum attachment)
|
| {
|
| Platform3DObject object = objectOrZero(m_texture.get());
|
| - context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, attachment, m_target, object, m_level);
|
| + context->framebufferTexture2D(GL_FRAMEBUFFER, attachment, m_target, object, m_level);
|
| }
|
|
|
| void WebGLTextureAttachment::unattach(GraphicsContext3D* context, GC3Denum attachment)
|
| {
|
| - if (attachment == GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT) {
|
| - context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::DEPTH_ATTACHMENT, m_target, 0, m_level);
|
| - context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, m_target, 0, m_level);
|
| - } else
|
| - context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, attachment, m_target, 0, m_level);
|
| + if (attachment == GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL) {
|
| + context->framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_target, 0, m_level);
|
| + context->framebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, m_target, 0, m_level);
|
| + } else {
|
| + context->framebufferTexture2D(GL_FRAMEBUFFER, attachment, m_target, 0, m_level);
|
| + }
|
| }
|
|
|
| GC3Denum WebGLTextureAttachment::type() const
|
| @@ -259,9 +261,9 @@ namespace {
|
| bool isColorRenderable(GC3Denum internalformat)
|
| {
|
| switch (internalformat) {
|
| - case GraphicsContext3D::RGBA4:
|
| - case GraphicsContext3D::RGB5_A1:
|
| - case GraphicsContext3D::RGB565:
|
| + case GL_RGBA4:
|
| + case GL_RGB5_A1:
|
| + case GL_RGB565:
|
| return true;
|
| default:
|
| return false;
|
| @@ -347,46 +349,46 @@ bool WebGLFramebuffer::isAttachmentComplete(WebGLAttachment* attachedObject, GC3
|
| WebGLSharedObject* object = attachedObject->object();
|
| ASSERT(object && (object->isTexture() || object->isRenderbuffer()));
|
|
|
| - if (attachment == GraphicsContext3D::DEPTH_ATTACHMENT) {
|
| + if (attachment == GL_DEPTH_ATTACHMENT) {
|
| if (object->isRenderbuffer()) {
|
| - if (internalformat != GraphicsContext3D::DEPTH_COMPONENT16) {
|
| + if (internalformat != GL_DEPTH_COMPONENT16) {
|
| *reason = "the internalformat of the attached renderbuffer is not DEPTH_COMPONENT16";
|
| return false;
|
| }
|
| } else if (object->isTexture()) {
|
| GC3Denum type = attachedObject->type();
|
| - if (!(context()->m_webglDepthTexture && internalformat == GraphicsContext3D::DEPTH_COMPONENT
|
| - && (type == GraphicsContext3D::UNSIGNED_SHORT || type == GraphicsContext3D::UNSIGNED_INT))) {
|
| + if (!(context()->m_webglDepthTexture && internalformat == GL_DEPTH_COMPONENT
|
| + && (type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT))) {
|
| *reason = "the attached texture is not a depth texture";
|
| return false;
|
| }
|
| }
|
| - } else if (attachment == GraphicsContext3D::STENCIL_ATTACHMENT) {
|
| + } else if (attachment == GL_STENCIL_ATTACHMENT) {
|
| // Depend on the underlying GL drivers to check stencil textures
|
| // and check renderbuffer type here only.
|
| if (object->isRenderbuffer()) {
|
| - if (internalformat != GraphicsContext3D::STENCIL_INDEX8) {
|
| + if (internalformat != GL_STENCIL_INDEX8) {
|
| *reason = "the internalformat of the attached renderbuffer is not STENCIL_INDEX8";
|
| return false;
|
| }
|
| }
|
| - } else if (attachment == GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT) {
|
| + } else if (attachment == GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL) {
|
| if (object->isRenderbuffer()) {
|
| - if (internalformat != GraphicsContext3D::DEPTH_STENCIL) {
|
| + if (internalformat != GL_DEPTH_STENCIL_OES) {
|
| *reason = "the internalformat of the attached renderbuffer is not DEPTH_STENCIL";
|
| return false;
|
| }
|
| } else if (object->isTexture()) {
|
| GC3Denum type = attachedObject->type();
|
| - if (!(context()->m_webglDepthTexture && internalformat == GraphicsContext3D::DEPTH_STENCIL
|
| - && type == GraphicsContext3D::UNSIGNED_INT_24_8)) {
|
| + if (!(context()->m_webglDepthTexture && internalformat == GL_DEPTH_STENCIL_OES
|
| + && type == GL_UNSIGNED_INT_24_8_OES)) {
|
| *reason = "the attached texture is not a DEPTH_STENCIL texture";
|
| return false;
|
| }
|
| }
|
| - } else if (attachment == GraphicsContext3D::COLOR_ATTACHMENT0
|
| - || (context()->m_webglDrawBuffers && attachment > GraphicsContext3D::COLOR_ATTACHMENT0
|
| - && attachment < static_cast<GC3Denum>(GraphicsContext3D::COLOR_ATTACHMENT0 + context()->maxColorAttachments()))) {
|
| + } else if (attachment == GL_COLOR_ATTACHMENT0
|
| + || (context()->m_webglDrawBuffers && attachment > GL_COLOR_ATTACHMENT0
|
| + && attachment < static_cast<GC3Denum>(GL_COLOR_ATTACHMENT0 + context()->maxColorAttachments()))) {
|
| if (object->isRenderbuffer()) {
|
| if (!isColorRenderable(internalformat)) {
|
| *reason = "the internalformat of the attached renderbuffer is not color-renderable";
|
| @@ -394,7 +396,7 @@ bool WebGLFramebuffer::isAttachmentComplete(WebGLAttachment* attachedObject, GC3
|
| }
|
| } else if (object->isTexture()) {
|
| GC3Denum type = attachedObject->type();
|
| - if (internalformat != GraphicsContext3D::RGBA && internalformat != GraphicsContext3D::RGB) {
|
| + if (internalformat != GL_RGBA && internalformat != GL_RGB) {
|
| *reason = "the internalformat of the attached texture is not color-renderable";
|
| return false;
|
| }
|
| @@ -402,12 +404,12 @@ bool WebGLFramebuffer::isAttachmentComplete(WebGLAttachment* attachedObject, GC3
|
| // WebGL yet. It would be better to depend on the underlying GL drivers to check on rendering to floating point textures
|
| // and add the check back to WebGL when above two extensions are implemented.
|
| // Assume UNSIGNED_BYTE is renderable here without the need to explicitly check if GL_OES_rgb8_rgba8 extension is supported.
|
| - if (type != GraphicsContext3D::UNSIGNED_BYTE
|
| - && type != GraphicsContext3D::UNSIGNED_SHORT_5_6_5
|
| - && type != GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4
|
| - && type != GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1
|
| - && !(type == GraphicsContext3D::FLOAT && context()->m_oesTextureFloat)
|
| - && !(type == GraphicsContext3D::HALF_FLOAT_OES && context()->m_oesTextureHalfFloat)) {
|
| + if (type != GL_UNSIGNED_BYTE
|
| + && type != GL_UNSIGNED_SHORT_5_6_5
|
| + && type != GL_UNSIGNED_SHORT_4_4_4_4
|
| + && type != GL_UNSIGNED_SHORT_5_5_5_1
|
| + && !(type == GL_FLOAT && context()->m_oesTextureFloat)
|
| + && !(type == GL_HALF_FLOAT_OES && context()->m_oesTextureHalfFloat)) {
|
| *reason = "unsupported type: The attached texture is not supported to be rendered to";
|
| return false;
|
| }
|
| @@ -442,15 +444,15 @@ void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GC3Denum attachment)
|
| m_attachments.remove(attachment);
|
| drawBuffersIfNecessary(false);
|
| switch (attachment) {
|
| - case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT:
|
| - attach(GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::DEPTH_ATTACHMENT);
|
| - attach(GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::STENCIL_ATTACHMENT);
|
| + case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL:
|
| + attach(GL_DEPTH_ATTACHMENT, GL_DEPTH_ATTACHMENT);
|
| + attach(GL_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT);
|
| break;
|
| - case GraphicsContext3D::DEPTH_ATTACHMENT:
|
| - attach(GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT, GraphicsContext3D::DEPTH_ATTACHMENT);
|
| + case GL_DEPTH_ATTACHMENT:
|
| + attach(GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL, GL_DEPTH_ATTACHMENT);
|
| break;
|
| - case GraphicsContext3D::STENCIL_ATTACHMENT:
|
| - attach(GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT, GraphicsContext3D::STENCIL_ATTACHMENT);
|
| + case GL_STENCIL_ATTACHMENT:
|
| + attach(GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL, GL_STENCIL_ATTACHMENT);
|
| break;
|
| }
|
| }
|
| @@ -484,7 +486,7 @@ GC3Dsizei WebGLFramebuffer::colorBufferWidth() const
|
| {
|
| if (!object())
|
| return 0;
|
| - WebGLAttachment* attachment = getAttachment(GraphicsContext3D::COLOR_ATTACHMENT0);
|
| + WebGLAttachment* attachment = getAttachment(GL_COLOR_ATTACHMENT0);
|
| if (!attachment)
|
| return 0;
|
|
|
| @@ -495,7 +497,7 @@ GC3Dsizei WebGLFramebuffer::colorBufferHeight() const
|
| {
|
| if (!object())
|
| return 0;
|
| - WebGLAttachment* attachment = getAttachment(GraphicsContext3D::COLOR_ATTACHMENT0);
|
| + WebGLAttachment* attachment = getAttachment(GL_COLOR_ATTACHMENT0);
|
| if (!attachment)
|
| return 0;
|
|
|
| @@ -506,7 +508,7 @@ GC3Denum WebGLFramebuffer::colorBufferFormat() const
|
| {
|
| if (!object())
|
| return 0;
|
| - WebGLAttachment* attachment = getAttachment(GraphicsContext3D::COLOR_ATTACHMENT0);
|
| + WebGLAttachment* attachment = getAttachment(GL_COLOR_ATTACHMENT0);
|
| if (!attachment)
|
| return 0;
|
| return attachment->format();
|
| @@ -522,23 +524,23 @@ GC3Denum WebGLFramebuffer::checkStatus(const char** reason) const
|
| for (AttachmentMap::const_iterator it = m_attachments.begin(); it != m_attachments.end(); ++it) {
|
| WebGLAttachment* attachment = it->value.get();
|
| if (!isAttachmentComplete(attachment, it->key, reason))
|
| - return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| + return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| if (!attachment->valid()) {
|
| *reason = "attachment is not valid";
|
| - return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED;
|
| + return GL_FRAMEBUFFER_UNSUPPORTED;
|
| }
|
| if (!attachment->format()) {
|
| *reason = "attachment is an unsupported format";
|
| - return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| + return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| }
|
| switch (it->key) {
|
| - case GraphicsContext3D::DEPTH_ATTACHMENT:
|
| + case GL_DEPTH_ATTACHMENT:
|
| haveDepth = true;
|
| break;
|
| - case GraphicsContext3D::STENCIL_ATTACHMENT:
|
| + case GL_STENCIL_ATTACHMENT:
|
| haveStencil = true;
|
| break;
|
| - case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT:
|
| + case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL:
|
| haveDepthStencil = true;
|
| break;
|
| }
|
| @@ -548,39 +550,39 @@ GC3Denum WebGLFramebuffer::checkStatus(const char** reason) const
|
| } else {
|
| if (width != attachment->width() || height != attachment->height()) {
|
| *reason = "attachments do not have the same dimensions";
|
| - return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
|
| + return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
|
| }
|
| }
|
| ++count;
|
| }
|
| if (!count) {
|
| *reason = "no attachments";
|
| - return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
|
| + return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
|
| }
|
| if (!width || !height) {
|
| *reason = "framebuffer has a 0 dimension";
|
| - return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| + return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| }
|
| // WebGL specific: no conflicting DEPTH/STENCIL/DEPTH_STENCIL attachments.
|
| if ((haveDepthStencil && (haveDepth || haveStencil)) || (haveDepth && haveStencil)) {
|
| *reason = "conflicting DEPTH/STENCIL/DEPTH_STENCIL attachments";
|
| - return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED;
|
| + return GL_FRAMEBUFFER_UNSUPPORTED;
|
| }
|
| - return GraphicsContext3D::FRAMEBUFFER_COMPLETE;
|
| + return GL_FRAMEBUFFER_COMPLETE;
|
| }
|
|
|
| bool WebGLFramebuffer::onAccess(GraphicsContext3D* context3d, const char** reason)
|
| {
|
| - if (checkStatus(reason) != GraphicsContext3D::FRAMEBUFFER_COMPLETE)
|
| + if (checkStatus(reason) != GL_FRAMEBUFFER_COMPLETE)
|
| return false;
|
| return true;
|
| }
|
|
|
| bool WebGLFramebuffer::hasStencilBuffer() const
|
| {
|
| - WebGLAttachment* attachment = getAttachment(GraphicsContext3D::STENCIL_ATTACHMENT);
|
| + WebGLAttachment* attachment = getAttachment(GL_STENCIL_ATTACHMENT);
|
| if (!attachment)
|
| - attachment = getAttachment(GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT);
|
| + attachment = getAttachment(GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL);
|
| return attachment && attachment->valid();
|
| }
|
|
|
| @@ -602,7 +604,7 @@ void WebGLFramebuffer::drawBuffers(const Vector<GC3Denum>& bufs)
|
| m_drawBuffers = bufs;
|
| m_filteredDrawBuffers.resize(m_drawBuffers.size());
|
| for (size_t i = 0; i < m_filteredDrawBuffers.size(); ++i)
|
| - m_filteredDrawBuffers[i] = GraphicsContext3D::NONE;
|
| + m_filteredDrawBuffers[i] = GL_NONE;
|
| drawBuffersIfNecessary(true);
|
| }
|
|
|
| @@ -613,14 +615,14 @@ void WebGLFramebuffer::drawBuffersIfNecessary(bool force)
|
| bool reset = force;
|
| // This filtering works around graphics driver bugs on Mac OS X.
|
| for (size_t i = 0; i < m_drawBuffers.size(); ++i) {
|
| - if (m_drawBuffers[i] != GraphicsContext3D::NONE && getAttachment(m_drawBuffers[i])) {
|
| + if (m_drawBuffers[i] != GL_NONE && getAttachment(m_drawBuffers[i])) {
|
| if (m_filteredDrawBuffers[i] != m_drawBuffers[i]) {
|
| m_filteredDrawBuffers[i] = m_drawBuffers[i];
|
| reset = true;
|
| }
|
| } else {
|
| - if (m_filteredDrawBuffers[i] != GraphicsContext3D::NONE) {
|
| - m_filteredDrawBuffers[i] = GraphicsContext3D::NONE;
|
| + if (m_filteredDrawBuffers[i] != GL_NONE) {
|
| + m_filteredDrawBuffers[i] = GL_NONE;
|
| reset = true;
|
| }
|
| }
|
| @@ -638,8 +640,8 @@ GC3Denum WebGLFramebuffer::getDrawBuffer(GC3Denum drawBuffer)
|
| if (index < static_cast<int>(m_drawBuffers.size()))
|
| return m_drawBuffers[index];
|
| if (drawBuffer == Extensions3D::DRAW_BUFFER0_EXT)
|
| - return GraphicsContext3D::COLOR_ATTACHMENT0;
|
| - return GraphicsContext3D::NONE;
|
| + return GL_COLOR_ATTACHMENT0;
|
| + return GL_NONE;
|
| }
|
|
|
| }
|
|
|