log functions and working opengl context on windows
This commit is contained in:
26
meson.build
26
meson.build
@@ -5,16 +5,38 @@ cargs = [
|
|||||||
'-Og',
|
'-Og',
|
||||||
'-g',
|
'-g',
|
||||||
]
|
]
|
||||||
if host_machine.system() == 'windows'
|
|
||||||
|
dependencies = []
|
||||||
|
|
||||||
|
link_args = []
|
||||||
|
|
||||||
|
if host_machine.system() == 'linux'
|
||||||
|
dependencies += [
|
||||||
|
dependency('libglvnd')
|
||||||
|
]
|
||||||
|
elif host_machine.system() == 'windows'
|
||||||
|
link_args += [
|
||||||
|
'-lopengl32'
|
||||||
|
]
|
||||||
|
|
||||||
cargs += [
|
cargs += [
|
||||||
'-DUNICODE',
|
'-DUNICODE',
|
||||||
'-D__UNICODE',
|
'-D__UNICODE',
|
||||||
'-municode'
|
'-municode'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if build_machine.system() == 'linux'
|
||||||
|
link_args += [
|
||||||
|
'-Lvendor/wine/',
|
||||||
|
]
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
executable(
|
executable(
|
||||||
'scuffedcraft',
|
'scuffedcraft',
|
||||||
'./src/main.c',
|
'src/main.c',
|
||||||
|
'src/log.c',
|
||||||
c_args: cargs,
|
c_args: cargs,
|
||||||
|
dependencies: dependencies,
|
||||||
|
link_args: link_args
|
||||||
)
|
)
|
||||||
|
|||||||
17
src/log.c
Normal file
17
src/log.c
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
void log_error(char* file, size_t line, char* str) {
|
||||||
|
fprintf(stderr, "[ERROR] %s:%zu: %s\n", file, line, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void log_errorf(char* file, size_t line, char* fmt, ...) {
|
||||||
|
fprintf(stderr, "[ERROR] %s:%zu: ", file, line);
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
vfprintf(stderr, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
12
src/log.h
Normal file
12
src/log.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifndef LOG_H_
|
||||||
|
#define LOG_H_
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define LOG_ERROR(str) log_error(__FILE__, __LINE__, (str))
|
||||||
|
#define LOG_ERRORF(fmt, ...) log_errorf(__FILE__, __LINE__, (fmt), __VA_ARGS__)
|
||||||
|
|
||||||
|
void log_error(char* file, size_t line, char* str);
|
||||||
|
void log_errorf(char* file, size_t line, char* fmt, ...);
|
||||||
|
|
||||||
|
#endif // LOG_H_
|
||||||
131
src/main.c
131
src/main.c
@@ -5,6 +5,8 @@
|
|||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
#include <winuser.h>
|
#include <winuser.h>
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
// int _main() {
|
// int _main() {
|
||||||
// return 0;
|
// return 0;
|
||||||
// }
|
// }
|
||||||
@@ -21,27 +23,79 @@ void OnSize(HWND hwnd, UINT flag, int width, int height) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||||
State* pState = NULL;
|
// State* pState = NULL;
|
||||||
if (uMsg == WM_CREATE) {
|
// if (uMsg == WM_CREATE) {
|
||||||
CREATESTRUCT* pCreate = (CREATESTRUCT*) lParam;
|
// CREATESTRUCT* pCreate = (CREATESTRUCT*) lParam;
|
||||||
pState = (State*) pCreate->lpCreateParams;
|
// pState = (State*) pCreate->lpCreateParams;
|
||||||
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR) pState);
|
// SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR) pState);
|
||||||
} else {
|
// } else {
|
||||||
LONG_PTR ptr = GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
// LONG_PTR ptr = GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||||
pState = (State*) ptr;
|
// pState = (State*) ptr;
|
||||||
}
|
// }
|
||||||
|
|
||||||
switch (uMsg) {
|
switch (uMsg) {
|
||||||
case WM_LBUTTONDOWN:
|
// case WM_LBUTTONDOWN: {
|
||||||
{
|
// printf("State: msg: %s, num: %d\n", pState->msg, pState->num);
|
||||||
printf("State: msg: %s, num: %d\n", pState->msg, pState->num);
|
//
|
||||||
|
// printf("lParam: %llx\n", lParam);
|
||||||
|
// int mouse_x = GET_X_LPARAM(lParam);
|
||||||
|
// printf("mouse_x: %x\n", mouse_x);
|
||||||
|
// int mouse_y = GET_Y_LPARAM(lParam);
|
||||||
|
// printf("mouse_y: %x\n", mouse_y);
|
||||||
|
// printf("x: %d y: %d\n", mouse_x, mouse_y);
|
||||||
|
//
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
|
||||||
printf("lParam: %llx\n", lParam);
|
case WM_CREATE: {
|
||||||
int mouse_x = GET_X_LPARAM(lParam);
|
const PIXELFORMATDESCRIPTOR pfd = {
|
||||||
printf("mouse_x: %x\n", mouse_x);
|
sizeof(PIXELFORMATDESCRIPTOR),
|
||||||
int mouse_y = GET_Y_LPARAM(lParam);
|
1,
|
||||||
printf("mouse_y: %x\n", mouse_y);
|
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
|
||||||
printf("x: %d y: %d\n", mouse_x, mouse_y);
|
PFD_TYPE_RGBA,
|
||||||
|
32, // Color depth
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
24, // Depth buffer bits
|
||||||
|
8, // Stencil buffer bits
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
HDC hdc = GetWindowDC(hwnd);
|
||||||
|
if (hdc == NULL) {
|
||||||
|
LOG_ERROR("Failed to get window DC");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
const int pixel_format = ChoosePixelFormat(hdc, &pfd);
|
||||||
|
if (SetPixelFormat(hdc, pixel_format, &pfd) == FALSE) {
|
||||||
|
LOG_ERRORF("Failed to set pixel format. Error: %d", GetLastError());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGLRC gl_ctx = wglCreateContext(hdc);
|
||||||
|
if (gl_ctx == NULL) {
|
||||||
|
LOG_ERRORF("Failed to create OpenGL context. Error: %d", GetLastError());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wglMakeCurrent(hdc, gl_ctx) == FALSE) {
|
||||||
|
LOG_ERRORF("Failed to make OpenGL context current. Error: %d", GetLastError());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// glClearColor(1.0, 1.0, 0.0, 1.0);
|
||||||
|
// glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -62,31 +116,29 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE: {
|
||||||
{
|
|
||||||
int width = LOWORD(lParam);
|
int width = LOWORD(lParam);
|
||||||
int height = HIWORD(lParam);
|
int height = HIWORD(lParam);
|
||||||
OnSize(hwnd, (UINT) wParam, width, height);
|
OnSize(hwnd, (UINT) wParam, width, height);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_PAINT:
|
// case WM_PAINT: {
|
||||||
{
|
// PAINTSTRUCT ps;
|
||||||
PAINTSTRUCT ps;
|
// HDC hdc = BeginPaint(hwnd, &ps);
|
||||||
HDC hdc = BeginPaint(hwnd, &ps);
|
//
|
||||||
|
// FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW + 1));
|
||||||
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW + 1));
|
// RECT blue = {
|
||||||
RECT blue = {
|
// .bottom = 100,
|
||||||
.bottom = 100,
|
// .left = 0,
|
||||||
.left = 0,
|
// .right = 100,
|
||||||
.right = 100,
|
// .top = 0
|
||||||
.top = 0
|
// };
|
||||||
};
|
// FillRect(hdc, &blue, (HBRUSH) (COLOR_BACKGROUND + 1));
|
||||||
FillRect(hdc, &blue, (HBRUSH) (COLOR_BACKGROUND + 1));
|
//
|
||||||
|
// EndPaint(hwnd, &ps);
|
||||||
EndPaint(hwnd, &ps);
|
// return 0;
|
||||||
return 0;
|
// }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
@@ -99,6 +151,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine,
|
|||||||
wc.lpfnWndProc = WindowProc;
|
wc.lpfnWndProc = WindowProc;
|
||||||
wc.hInstance = hInstance;
|
wc.hInstance = hInstance;
|
||||||
wc.lpszClassName = CLASS_NAME;
|
wc.lpszClassName = CLASS_NAME;
|
||||||
|
wc.style = CS_OWNDC;
|
||||||
|
|
||||||
RegisterClass(&wc);
|
RegisterClass(&wc);
|
||||||
|
|
||||||
@@ -124,8 +177,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine,
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (hwnd == NULL) {
|
if (hwnd == NULL) {
|
||||||
printf("ERROR: hwnd was NULL\n");
|
LOG_ERROR("ERROR: hwnd was NULL\n");
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowWindow(hwnd, nCmdShow);
|
ShowWindow(hwnd, nCmdShow);
|
||||||
|
|||||||
BIN
vendor/wine/opengl32.dll
vendored
Normal file
BIN
vendor/wine/opengl32.dll
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user