[PATCH 2/2] opengl32: add wglGetProcAddress tests
Roderick Colenbrander
thunderbird2k at gmail.com
Fri Jun 8 01:18:22 CDT 2012
---
dlls/opengl32/tests/opengl.c | 64 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c
index a91dfb8..ffc676e 100644
--- a/dlls/opengl32/tests/opengl.c
+++ b/dlls/opengl32/tests/opengl.c
@@ -37,6 +37,7 @@ const unsigned char * WINAPI glGetString(unsigned int);
#define GL_VENDOR 0x1F00
#define GL_RENDERER 0x1F01
#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
#define GL_VIEWPORT 0x0ba2
void WINAPI glGetIntegerv(GLenum pname, GLint *params);
@@ -116,6 +117,33 @@ static void init_functions(void)
#undef GET_PROC
}
+static BOOL gl_extension_supported(const char *extensions, const char *extension_string)
+{
+ size_t ext_str_len = strlen(extension_string);
+
+ while (*extensions)
+ {
+ const char *start;
+ size_t len;
+
+ while (isspace(*extensions))
+ ++extensions;
+ start = extensions;
+ while (!isspace(*extensions) && *extensions)
+ ++extensions;
+
+ len = extensions - start;
+ if (!len)
+ continue;
+
+ if (len == ext_str_len && !memcmp(start, extension_string, ext_str_len))
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
static void test_pbuffers(HDC hdc)
{
const int iAttribList[] = { WGL_DRAW_TO_PBUFFER_ARB, 1, /* Request pbuffer support */
@@ -738,6 +766,41 @@ static void test_deletecontext(HDC hdc)
ok(hglrc == NULL, "A WGL context is active while none was expected\n");
}
+
+static void test_getprocaddress(HDC hdc)
+{
+ const char *extensions = (const char*)glGetString(GL_EXTENSIONS);
+ PROC func = NULL;
+ HGLRC ctx = wglGetCurrentContext();
+
+ if (!extensions)
+ {
+ skip("skipping wglGetProcAddress tests because no GL extensions supported\n");
+ return;
+ }
+
+ /* The goal of the test will be to test behavior of wglGetProcAddress when
+ * no WGL context is active. Before the test we pick an extension (GL_ARB_multitexture)
+ * which any GL >=1.2.1 implementation supports. Unfortunately the GDI renderer doesn't
+ * support it. There aren't any extensions we can use for this test which are supported by
+ * both GDI and real drivers.
+ * Note GDI only has GL_EXT_bgra, GL_EXT_paletted_texture and GL_WIN_swap_hint.
+ */
+ if (!gl_extension_supported(extensions, "GL_ARB_multitexture"))
+ {
+ skip("skipping test because lack of GL_ARB_multitexture support\n");
+ }
+
+ func = wglGetProcAddress("glActiveTextureARB");
+ ok(func != NULL, "Unable to lookup glActiveTextureARB, last error %#x\n", GetLastError());
+
+ /* Temporarily disable the context, so we can see that we can't retrieve functions now. */
+ wglMakeCurrent(hdc, NULL);
+ func = wglGetProcAddress("glActiveTextureARB");
+ todo_wine ok(func == NULL, "Function lookup without a context passed, expected a failure; last error %#x\n", GetLastError());
+ wglMakeCurrent(hdc, ctx);
+}
+
static void test_make_current_read(HDC hdc)
{
int res;
@@ -1403,6 +1466,7 @@ START_TEST(opengl)
return;
}
+ test_getprocaddress(hdc);
test_deletecontext(hdc);
test_makecurrent(hdc);
test_setpixelformat(hdc);
--
1.7.10.2
More information about the wine-patches
mailing list