parent
1d746bfeb2
commit
ca14052cfe
@ -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…
Reference in new issue