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

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

Issue 106503003: Changed GL enums from GraphicsContext3D to standard versions (Take 2) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/canvas/WebGLBuffer.cpp ('k') | Source/core/html/canvas/WebGLFramebuffer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 } 66 }
67 67
68 void WebGLDrawBuffers::drawBuffersWEBGL(const Vector<GC3Denum>& buffers) 68 void WebGLDrawBuffers::drawBuffersWEBGL(const Vector<GC3Denum>& buffers)
69 { 69 {
70 if (isLost()) 70 if (isLost())
71 return; 71 return;
72 GC3Dsizei n = buffers.size(); 72 GC3Dsizei n = buffers.size();
73 const GC3Denum* bufs = buffers.data(); 73 const GC3Denum* bufs = buffers.data();
74 if (!m_context->m_framebufferBinding) { 74 if (!m_context->m_framebufferBinding) {
75 if (n != 1) { 75 if (n != 1) {
76 m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "draw BuffersWEBGL", "more than one buffer"); 76 m_context->synthesizeGLError(GL_INVALID_VALUE, "drawBuffersWEBGL", " more than one buffer");
77 return; 77 return;
78 } 78 }
79 if (bufs[0] != GraphicsContext3D::BACK && bufs[0] != GraphicsContext3D:: NONE) { 79 if (bufs[0] != GL_BACK && bufs[0] != GL_NONE) {
80 m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, " drawBuffersWEBGL", "BACK or NONE"); 80 m_context->synthesizeGLError(GL_INVALID_OPERATION, "drawBuffersWEBGL ", "BACK or NONE");
81 return; 81 return;
82 } 82 }
83 // Because the backbuffer is simulated on all current WebKit ports, we n eed to change BACK to COLOR_ATTACHMENT0. 83 // Because the backbuffer is simulated on all current WebKit ports, we n eed to change BACK to COLOR_ATTACHMENT0.
84 GC3Denum value = (bufs[0] == GraphicsContext3D::BACK) ? GraphicsContext3 D::COLOR_ATTACHMENT0 : GraphicsContext3D::NONE; 84 GC3Denum value = (bufs[0] == GL_BACK) ? GL_COLOR_ATTACHMENT0 : GL_NONE;
85 m_context->graphicsContext3D()->extensions()->drawBuffersEXT(1, &value); 85 m_context->graphicsContext3D()->extensions()->drawBuffersEXT(1, &value);
86 m_context->setBackDrawBuffer(bufs[0]); 86 m_context->setBackDrawBuffer(bufs[0]);
87 } else { 87 } else {
88 if (n > m_context->maxDrawBuffers()) { 88 if (n > m_context->maxDrawBuffers()) {
89 m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "draw BuffersWEBGL", "more than max draw buffers"); 89 m_context->synthesizeGLError(GL_INVALID_VALUE, "drawBuffersWEBGL", " more than max draw buffers");
90 return; 90 return;
91 } 91 }
92 for (GC3Dsizei i = 0; i < n; ++i) { 92 for (GC3Dsizei i = 0; i < n; ++i) {
93 if (bufs[i] != GraphicsContext3D::NONE && bufs[i] != static_cast<GC3 Denum>(Extensions3D::COLOR_ATTACHMENT0_EXT + i)) { 93 if (bufs[i] != GL_NONE && bufs[i] != static_cast<GC3Denum>(Extension s3D::COLOR_ATTACHMENT0_EXT + i)) {
94 m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATIO N, "drawBuffersWEBGL", "COLOR_ATTACHMENTi_EXT or NONE"); 94 m_context->synthesizeGLError(GL_INVALID_OPERATION, "drawBuffersW EBGL", "COLOR_ATTACHMENTi_EXT or NONE");
95 return; 95 return;
96 } 96 }
97 } 97 }
98 m_context->m_framebufferBinding->drawBuffers(buffers); 98 m_context->m_framebufferBinding->drawBuffers(buffers);
99 } 99 }
100 } 100 }
101 101
102 // static 102 // static
103 bool WebGLDrawBuffers::satisfiesWebGLRequirements(WebGLRenderingContext* webglCo ntext) 103 bool WebGLDrawBuffers::satisfiesWebGLRequirements(WebGLRenderingContext* webglCo ntext)
104 { 104 {
105 GraphicsContext3D* context = webglContext->graphicsContext3D(); 105 GraphicsContext3D* context = webglContext->graphicsContext3D();
106 106
107 // This is called after we make sure GL_EXT_draw_buffers is supported. 107 // This is called after we make sure GL_EXT_draw_buffers is supported.
108 GC3Dint maxDrawBuffers = 0; 108 GC3Dint maxDrawBuffers = 0;
109 GC3Dint maxColorAttachments = 0; 109 GC3Dint maxColorAttachments = 0;
110 context->getIntegerv(Extensions3D::MAX_DRAW_BUFFERS_EXT, &maxDrawBuffers); 110 context->getIntegerv(Extensions3D::MAX_DRAW_BUFFERS_EXT, &maxDrawBuffers);
111 context->getIntegerv(Extensions3D::MAX_COLOR_ATTACHMENTS_EXT, &maxColorAttac hments); 111 context->getIntegerv(Extensions3D::MAX_COLOR_ATTACHMENTS_EXT, &maxColorAttac hments);
112 if (maxDrawBuffers < 4 || maxColorAttachments < 4) 112 if (maxDrawBuffers < 4 || maxColorAttachments < 4)
113 return false; 113 return false;
114 114
115 Platform3DObject fbo = context->createFramebuffer(); 115 Platform3DObject fbo = context->createFramebuffer();
116 context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, fbo); 116 context->bindFramebuffer(GL_FRAMEBUFFER, fbo);
117 117
118 const unsigned char* buffer = 0; // Chromium doesn't allow init data for dep th/stencil tetxures. 118 const unsigned char* buffer = 0; // Chromium doesn't allow init data for dep th/stencil tetxures.
119 bool supportsDepth = (context->extensions()->supports("GL_CHROMIUM_depth_tex ture") 119 bool supportsDepth = (context->extensions()->supports("GL_CHROMIUM_depth_tex ture")
120 || context->extensions()->supports("GL_OES_depth_texture") 120 || context->extensions()->supports("GL_OES_depth_texture")
121 || context->extensions()->supports("GL_ARB_depth_texture")); 121 || context->extensions()->supports("GL_ARB_depth_texture"));
122 bool supportsDepthStencil = (context->extensions()->supports("GL_EXT_packed_ depth_stencil") 122 bool supportsDepthStencil = (context->extensions()->supports("GL_EXT_packed_ depth_stencil")
123 || context->extensions()->supports("GL_OES_packed_depth_stencil")); 123 || context->extensions()->supports("GL_OES_packed_depth_stencil"));
124 Platform3DObject depthStencil = 0; 124 Platform3DObject depthStencil = 0;
125 if (supportsDepthStencil) { 125 if (supportsDepthStencil) {
126 depthStencil = context->createTexture(); 126 depthStencil = context->createTexture();
127 context->bindTexture(GraphicsContext3D::TEXTURE_2D, depthStencil); 127 context->bindTexture(GL_TEXTURE_2D, depthStencil);
128 context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D: :DEPTH_STENCIL, 1, 1, 0, GraphicsContext3D::DEPTH_STENCIL, GraphicsContext3D::UN SIGNED_INT_24_8, buffer); 128 context->texImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_STENCIL_OES, 1, 1, 0, GL_ DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES, buffer);
129 } 129 }
130 Platform3DObject depth = 0; 130 Platform3DObject depth = 0;
131 if (supportsDepth) { 131 if (supportsDepth) {
132 depth = context->createTexture(); 132 depth = context->createTexture();
133 context->bindTexture(GraphicsContext3D::TEXTURE_2D, depth); 133 context->bindTexture(GL_TEXTURE_2D, depth);
134 context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D: :DEPTH_COMPONENT, 1, 1, 0, GraphicsContext3D::DEPTH_COMPONENT, GraphicsContext3D ::UNSIGNED_INT, buffer); 134 context->texImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 1, 1, 0, GL_DE PTH_COMPONENT, GL_UNSIGNED_INT, buffer);
135 } 135 }
136 136
137 Vector<Platform3DObject> colors; 137 Vector<Platform3DObject> colors;
138 bool ok = true; 138 bool ok = true;
139 GC3Dint maxAllowedBuffers = std::min(maxDrawBuffers, maxColorAttachments); 139 GC3Dint maxAllowedBuffers = std::min(maxDrawBuffers, maxColorAttachments);
140 for (GC3Dint i = 0; i < maxAllowedBuffers; ++i) { 140 for (GC3Dint i = 0; i < maxAllowedBuffers; ++i) {
141 Platform3DObject color = context->createTexture(); 141 Platform3DObject color = context->createTexture();
142 colors.append(color); 142 colors.append(color);
143 context->bindTexture(GraphicsContext3D::TEXTURE_2D, color); 143 context->bindTexture(GL_TEXTURE_2D, color);
144 context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D: :RGBA, 1, 1, 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, buffe r); 144 context->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSI GNED_BYTE, buffer);
145 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsCo ntext3D::COLOR_ATTACHMENT0 + i, GraphicsContext3D::TEXTURE_2D, color, 0); 145 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, color, 0);
146 if (context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != G raphicsContext3D::FRAMEBUFFER_COMPLETE) { 146 if (context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_CO MPLETE) {
147 ok = false; 147 ok = false;
148 break; 148 break;
149 } 149 }
150 if (supportsDepth) { 150 if (supportsDepth) {
151 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, Graphi csContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, depth, 0); 151 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, G L_TEXTURE_2D, depth, 0);
152 if (context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) { 152 if (context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFE R_COMPLETE) {
153 ok = false; 153 ok = false;
154 break; 154 break;
155 } 155 }
156 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, Graphi csContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, 0, 0); 156 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, G L_TEXTURE_2D, 0, 0);
157 } 157 }
158 if (supportsDepthStencil) { 158 if (supportsDepthStencil) {
159 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, Graphi csContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, depthStencil, 0); 159 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, G L_TEXTURE_2D, depthStencil, 0);
160 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, Graphi csContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, depthStencil, 0) ; 160 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depthStencil, 0);
161 if (context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) { 161 if (context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFE R_COMPLETE) {
162 ok = false; 162 ok = false;
163 break; 163 break;
164 } 164 }
165 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, Graphi csContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, 0, 0); 165 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, G L_TEXTURE_2D, 0, 0);
166 context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, Graphi csContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, 0, 0); 166 context->framebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
167 } 167 }
168 } 168 }
169 169
170 webglContext->restoreCurrentFramebuffer(); 170 webglContext->restoreCurrentFramebuffer();
171 context->deleteFramebuffer(fbo); 171 context->deleteFramebuffer(fbo);
172 webglContext->restoreCurrentTexture2D(); 172 webglContext->restoreCurrentTexture2D();
173 if (supportsDepth) 173 if (supportsDepth)
174 context->deleteTexture(depth); 174 context->deleteTexture(depth);
175 if (supportsDepthStencil) 175 if (supportsDepthStencil)
176 context->deleteTexture(depthStencil); 176 context->deleteTexture(depthStencil);
177 for (size_t i = 0; i < colors.size(); ++i) 177 for (size_t i = 0; i < colors.size(); ++i)
178 context->deleteTexture(colors[i]); 178 context->deleteTexture(colors[i]);
179 return ok; 179 return ok;
180 } 180 }
181 181
182 } // namespace WebCore 182 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/html/canvas/WebGLBuffer.cpp ('k') | Source/core/html/canvas/WebGLFramebuffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698