summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/client
diff options
context:
space:
mode:
authorapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-03 23:27:43 +0000
committerapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-03 23:27:43 +0000
commit9a298ada39103abf74e423519a9ee8251bbe0555 (patch)
treefe6229f2fe75a3d844408d9051cc3fa90dfe7fa8 /gpu/command_buffer/client
parent49a518aabe67f9366bc23d0142493cb6508d662d (diff)
downloadchromium_src-9a298ada39103abf74e423519a9ee8251bbe0555.zip
chromium_src-9a298ada39103abf74e423519a9ee8251bbe0555.tar.gz
chromium_src-9a298ada39103abf74e423519a9ee8251bbe0555.tar.bz2
Added support for lost context recovery on the client side. None of our service side GL implementations actually report lost contexts (yet).
Added pglGetError to PGL library. pglSwapBuffers returns false on a lost context or other non-recoverable error and pglGetError reports PGL_CONTEXT_LOST. Updated demo plugins to reset their PGL contexts on context lost. Standalone plugins cannot currently recover from lost context because they don't use PGL. Added error code to NPDeviceContext3D for lost context. TEST=none BUG=none Review URL: http://codereview.chromium.org/566021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38039 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/client')
-rw-r--r--gpu/command_buffer/client/gles2_demo.cc6
-rw-r--r--gpu/command_buffer/client/gles2_demo_c.c2
-rw-r--r--gpu/command_buffer/client/gles2_demo_c.h2
-rw-r--r--gpu/command_buffer/client/gles2_demo_cc.cc73
-rw-r--r--gpu/command_buffer/client/gles2_demo_cc.h3
-rw-r--r--gpu/command_buffer/client/gles2_lib.cc1
6 files changed, 41 insertions, 46 deletions
diff --git a/gpu/command_buffer/client/gles2_demo.cc b/gpu/command_buffer/client/gles2_demo.cc
index 9b5977e..8992c2c 100644
--- a/gpu/command_buffer/client/gles2_demo.cc
+++ b/gpu/command_buffer/client/gles2_demo.cc
@@ -83,6 +83,8 @@ bool GLES2Demo::Setup(void* hwnd, int32 size) {
transfer_buffer.ptr,
transfer_buffer_id));
+ GLFromCPPInit();
+
return command_buffer.release() != NULL;
}
@@ -97,8 +99,8 @@ LRESULT CALLBACK WindowProc(
PostQuitMessage(0);
break;
case WM_PAINT: {
- GLFromCPPTestFunction();
- GLFromCTestFunction();
+ GLFromCPPDraw();
+ GLFromCDraw();
// TODO(gman): Not sure how SwapBuffer should be exposed.
gles2::GetGLContext()->SwapBuffers();
break;
diff --git a/gpu/command_buffer/client/gles2_demo_c.c b/gpu/command_buffer/client/gles2_demo_c.c
index abba8b7..aa83b57 100644
--- a/gpu/command_buffer/client/gles2_demo_c.c
+++ b/gpu/command_buffer/client/gles2_demo_c.c
@@ -8,7 +8,7 @@
#include <GLES2/gl2.h>
#include "gpu/command_buffer/client/gles2_demo_c.h"
-void GLFromCTestFunction() {
+void GLFromCDraw() {
// glClear(GL_COLOR_BUFFER_BIT);
}
diff --git a/gpu/command_buffer/client/gles2_demo_c.h b/gpu/command_buffer/client/gles2_demo_c.h
index 3ce07b2..d4d69e9 100644
--- a/gpu/command_buffer/client/gles2_demo_c.h
+++ b/gpu/command_buffer/client/gles2_demo_c.h
@@ -11,7 +11,7 @@
extern "C" {
#endif
-void GLFromCTestFunction();
+void GLFromCDraw();
#ifdef __cplusplus
}
diff --git a/gpu/command_buffer/client/gles2_demo_cc.cc b/gpu/command_buffer/client/gles2_demo_cc.cc
index 2544f42..c6beff6 100644
--- a/gpu/command_buffer/client/gles2_demo_cc.cc
+++ b/gpu/command_buffer/client/gles2_demo_cc.cc
@@ -130,15 +130,43 @@ void InitShaders() {
CheckGLError();
}
-#define PI 3.1415926535897932384626433832795f
+GLuint CreateCheckerboardTexture() {
+ static unsigned char pixels[] = {
+ 255, 255, 255,
+ 0, 0, 0,
+ 0, 0, 0,
+ 255, 255, 255,
+ };
+ GLuint texture;
+ glGenTextures(1, &texture);
+ glBindTexture(GL_TEXTURE_2D, texture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE,
+ pixels);
+ return texture;
+}
+
+} // anonymous namespace.
+
+void GLFromCPPInit() {
+ glClearColor(0.f, 0.f, .7f, 1.f);
+ g_texture = CreateCheckerboardTexture();
+ InitShaders();
+}
+
+void GLFromCPPDraw() {
+ const float kPi = 3.1415926535897932384626433832795f;
-void Draw() {
// TODO(kbr): base the angle on time rather than on ticks
g_angle = (g_angle + 1) % 360;
// Rotate about the Z axis
GLfloat rot_matrix[16];
- GLfloat cos_angle = cosf(static_cast<GLfloat>(g_angle) * PI / 180.0f);
- GLfloat sin_angle = sinf(static_cast<GLfloat>(g_angle) * PI / 180.0f);
+ GLfloat cos_angle = cosf(static_cast<GLfloat>(g_angle) * kPi / 180.0f);
+ GLfloat sin_angle = sinf(static_cast<GLfloat>(g_angle) * kPi / 180.0f);
// OpenGL matrices are column-major
rot_matrix[0] = cos_angle;
rot_matrix[1] = sin_angle;
@@ -188,40 +216,3 @@ void Draw() {
CheckGLError();
glFlush();
}
-
-GLuint CreateCheckerboardTexture() {
- static unsigned char pixels[] = {
- 255, 255, 255,
- 0, 0, 0,
- 0, 0, 0,
- 255, 255, 255,
- };
- GLuint texture;
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE,
- pixels);
- return texture;
-}
-
-void Init() {
- glClearColor(0.f, 0.f, .7f, 1.f);
- g_texture = CreateCheckerboardTexture();
- InitShaders();
-}
-
-} // anonymous namespace.
-
-void GLFromCPPTestFunction() {
- static bool initialized = false;
- if (!initialized) {
- initialized = true;
- Init();
- }
- Draw();
-}
diff --git a/gpu/command_buffer/client/gles2_demo_cc.h b/gpu/command_buffer/client/gles2_demo_cc.h
index ef074e0..158ba43 100644
--- a/gpu/command_buffer/client/gles2_demo_cc.h
+++ b/gpu/command_buffer/client/gles2_demo_cc.h
@@ -7,7 +7,8 @@
#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_DEMO_CC_H
#define GPU_COMMAND_BUFFER_CLIENT_GLES2_DEMO_CC_H
-void GLFromCPPTestFunction();
+void GLFromCPPInit();
+void GLFromCPPDraw();
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_DEMO_CC_H
diff --git a/gpu/command_buffer/client/gles2_lib.cc b/gpu/command_buffer/client/gles2_lib.cc
index 003a4cc..5753715 100644
--- a/gpu/command_buffer/client/gles2_lib.cc
+++ b/gpu/command_buffer/client/gles2_lib.cc
@@ -16,6 +16,7 @@ void Initialize() {
void Terminate() {
gpu::ThreadLocalFree(g_gl_context_key);
+ g_gl_context_key = 0;
}
gpu::gles2::GLES2Implementation* GetGLContext() {