Add a test for basic functionality on win32.

macos/v1.5.9
Eric Anholt 11 years ago
parent 1d746bfeb2
commit ca14052cfe
  1. 1
      test/.gitignore
  2. 19
      test/Makefile.am
  3. 128
      test/wgl_common.c
  4. 27
      test/wgl_common.h
  5. 81
      test/wgl_core_and_exts.c

1
test/.gitignore vendored

@ -6,5 +6,6 @@ glx_public_api
glx_public_api_core
headerguards
miscdefines
wgl_core_and_exts
*.log
*.trs

@ -23,6 +23,7 @@ EPOXY = $(builddir)/../src/libepoxy.la
check_LTLIBRARIES = \
$(EGL_LIBS) \
$(GLX_LIBS) \
$(WGL_LIBS) \
$()
libegl_common_la_SOURCES = \
@ -35,6 +36,12 @@ libglx_common_la_SOURCES = \
glx_common.h
$()
libwgl_common_la_SOURCES = \
wgl_common.c \
wgl_common.h
$()
libwgl_common_la_LIBADD = $(EPOXY)
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
@ -43,6 +50,7 @@ AM_CPPFLAGS = \
TESTS = \
$(EGL_TESTS) \
$(GLX_TESTS) \
$(WGL_TESTS) \
headerguards$(EXEEXT) \
miscdefines$(EXEEXT) \
$()
@ -69,6 +77,14 @@ GLX_TESTS = \
GLX_LIBS = libglx_common.la
endif
if BUILD_WGL
WGL_TESTS = \
wgl_core_and_exts$(EXEEXT) \
$()
WGL_LIBS = libwgl_common.la
endif
egl_has_extension_nocontext_LDFLAGS = $(X11_LIBS) $(EPOXY) libegl_common.la
egl_has_extension_nocontext_DEPENDENCIES = libegl_common.la
@ -86,3 +102,6 @@ glx_glxgetprocaddress_nocontext_DEPENDENCIES = libglx_common.la
glx_has_extension_nocontext_LDFLAGS = $(X11_LIBS) $(EPOXY) libglx_common.la
glx_has_extension_nocontext_DEPENDENCIES = libglx_common.la
wgl_core_and_exts_LDFLAGS = $(EPOXY) libwgl_common.la -lgdi32
wgl_core_and_exts_DEPENDENCIES = libwgl_common.la

@ -0,0 +1,128 @@
/*
* Copyright © 2013 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#include <stdio.h>
#include <epoxy/wgl.h>
#include "wgl_common.h"
static int (*test_callback)(HDC hdc);
static void
setup_pixel_format(HDC hdc)
{
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0,
};
int pixel_format;
pixel_format = ChoosePixelFormat(hdc, &pfd);
if (!pixel_format) {
fprintf(stderr, "ChoosePixelFormat failed.");
exit(1);
}
if (SetPixelFormat(hdc, pixel_format, &pfd) != TRUE) {
fprintf(stderr, "SetPixelFormat() failed.");
exit(1);
}
}
static LRESULT CALLBACK
window_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
HDC hdc = GetDC(hwnd);
int ret;
switch (message) {
case WM_CREATE:
setup_pixel_format(hdc);
ret = test_callback(hdc);
ReleaseDC(hwnd, hdc);
exit(ret);
return 0;
default:
return DefWindowProc(hwnd, message, wparam, lparam);
}
}
void
make_window_and_test(int (*callback)(HDC hdc))
{
const char *class_name = "epoxy";
const char *window_name = "epoxy";
int width = 150;
int height = 150;
HWND hwnd;
HINSTANCE hcurrentinst = NULL;
WNDCLASS window_class;
test_callback = callback;
memset(&window_class, 0, sizeof(window_class));
window_class.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
window_class.lpfnWndProc = window_proc;
window_class.cbClsExtra = 0;
window_class.cbWndExtra = 0;
window_class.hInstance = hcurrentinst;
window_class.hIcon = LoadIcon(NULL, IDI_APPLICATION);
window_class.hCursor = LoadCursor(NULL, IDC_ARROW);
window_class.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
window_class.lpszMenuName = NULL;
window_class.lpszClassName = class_name;
if (!RegisterClass(&window_class)) {
fprintf(stderr, "Failed to register window class\n");
exit(1);
}
/* create window */
hwnd = CreateWindow(class_name, window_name,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
0, 0, width, height,
NULL, NULL, hcurrentinst, NULL);
ShowWindow(hwnd, SW_SHOWDEFAULT);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

@ -0,0 +1,27 @@
/*
* Copyright © 2013 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#include <epoxy/wgl.h>
void
make_window_and_test(int (*callback)(HDC hdc));

@ -0,0 +1,81 @@
/*
* Copyright © 2013 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#include <config.h>
#include <stdio.h>
#include "wgl_common.h"
#include <epoxy/gl.h>
static int
test_function(HDC hdc)
{
bool pass = true;
int val;
HGLRC ctx;
ctx = wglCreateContext(hdc);
if (!ctx) {
fprintf(stderr, "Failed to create wgl context\n");
return 1;
}
if (!wglMakeCurrent(hdc, ctx)) {
fprintf(stderr, "Failed to make context current\n");
return 1;
}
/* GL 1.0 APIs are available as symbols in opengl32.dll. */
glEnable(GL_LIGHTING);
val = 0;
glGetIntegerv(GL_LIGHTING, &val);
if (!val) {
fprintf(stderr, "Enabling GL_LIGHTING didn't stick.\n");
pass = false;
}
if (epoxy_gl_version() >= 15 ||
epoxy_has_gl_extension("GL_ARB_vertex_buffer_object")) {
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 1234);
val = 0;
glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &val);
if (val != 1234) {
printf("GL_ELEMENT_ARRAY_BUFFER_BINDING didn't stick: %d\n", val);
pass = false;
}
}
wglMakeCurrent(NULL, NULL);
wglDeleteContext(ctx);
return !pass;
}
int
main(int argc, char **argv)
{
make_window_and_test(test_function);
/* UNREACHED */
return 1;
}
Loading…
Cancel
Save