More progress with xlib and glx
This commit is contained in:
@@ -6,6 +6,19 @@
|
|||||||
#include "DynString.h"
|
#include "DynString.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
|
static void DynString_reserve(DynString* dstr, const size_t new_capacity) {
|
||||||
|
if (dstr->capacity >= new_capacity) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
dstr->data = (char*) realloc(dstr->data, sizeof(char) * new_capacity);
|
||||||
|
if (errno != 0) {
|
||||||
|
LOG_FATAL("Ran out of memory");
|
||||||
|
}
|
||||||
|
dstr->capacity = new_capacity;
|
||||||
|
}
|
||||||
|
|
||||||
DynString DynString_alloc(const char* str, const size_t len) {
|
DynString DynString_alloc(const char* str, const size_t len) {
|
||||||
DynString dstr = {
|
DynString dstr = {
|
||||||
.data = (char*) malloc(sizeof(char) * (len + 1)),
|
.data = (char*) malloc(sizeof(char) * (len + 1)),
|
||||||
@@ -94,19 +107,6 @@ bool DynString_equal_next_chars_c_str(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynString_reserve(DynString* dstr, const size_t new_capacity) {
|
|
||||||
if (dstr->capacity >= new_capacity) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
dstr->data = (char*) realloc(dstr->data, sizeof(char) * new_capacity);
|
|
||||||
if (errno != 0) {
|
|
||||||
LOG_FATAL("Ran out of memory");
|
|
||||||
}
|
|
||||||
dstr->capacity = new_capacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DynString_concat_c_str(
|
void DynString_concat_c_str(
|
||||||
DynString* dstr,
|
DynString* dstr,
|
||||||
const char* str,
|
const char* str,
|
||||||
|
|||||||
69
src/main.c
69
src/main.c
@@ -1,3 +1,4 @@
|
|||||||
|
#include <X11/X.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -238,6 +239,73 @@ void print_info(Display* display) {
|
|||||||
puts("");
|
puts("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void glx_print_client_info(Display* display) {
|
||||||
|
const char* glx_client_vendor_str = glXGetClientString(display, GLX_VENDOR);
|
||||||
|
printf("Client GLX_VENDOR: %s\n", glx_client_vendor_str);
|
||||||
|
const char* glx_client_version_str = glXGetClientString(display, GLX_VERSION);
|
||||||
|
printf("Client GLX_VERSION: %s\n", glx_client_version_str);
|
||||||
|
const char* glx_client_extensions_str = glXGetClientString(display, GLX_EXTENSIONS);
|
||||||
|
printf("Client GLX_EXTENSIONS: %s\n", glx_client_extensions_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void glx_print_server_info(Display* display) {
|
||||||
|
const char* glx_server_vendor_str = glXQueryServerString(display, DefaultScreen(display), GLX_VENDOR);
|
||||||
|
printf("Server GLX_VENDOR: %s\n", glx_server_vendor_str);
|
||||||
|
const char* glx_server_version_str = glXQueryServerString(display, DefaultScreen(display), GLX_VERSION);
|
||||||
|
printf("Server GLX_VERSION: %s\n", glx_server_version_str);
|
||||||
|
const char* glx_server_extensions_str = glXQueryServerString(display, DefaultScreen(display), GLX_EXTENSIONS);
|
||||||
|
printf("Server GLX_EXTENSIONS: %s\n", glx_server_extensions_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_glxfbconfig(Display* display, const GLXFBConfig* cfg) {
|
||||||
|
int value = 0;
|
||||||
|
|
||||||
|
#define PRINT_GLXFBCONFIG_VALUE(attrib) \
|
||||||
|
value = 0; \
|
||||||
|
if (glXGetFBConfigAttrib(display, *cfg, attrib, &value) != Success) { \
|
||||||
|
LOG_FATALF("Invalid attrib %s", #attrib); \
|
||||||
|
} \
|
||||||
|
printf(" %s: %d\n", #attrib, value)
|
||||||
|
|
||||||
|
puts("{");
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_FBCONFIG_ID);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_BUFFER_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_LEVEL);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_DOUBLEBUFFER);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_STEREO);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_AUX_BUFFERS);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_RED_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_GREEN_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_BLUE_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_ALPHA_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_DEPTH_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_STENCIL_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_RED_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_GREEN_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_BLUE_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_ALPHA_SIZE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_SAMPLE_BUFFERS);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_SAMPLES);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_RENDER_TYPE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_DRAWABLE_TYPE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_X_RENDERABLE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_X_VISUAL_TYPE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_CONFIG_CAVEAT);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_TYPE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_INDEX_VALUE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_RED_VALUE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_GREEN_VALUE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_BLUE_VALUE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_ALPHA_VALUE);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_MAX_PBUFFER_WIDTH);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_MAX_PBUFFER_HEIGHT);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_MAX_PBUFFER_PIXELS);
|
||||||
|
PRINT_GLXFBCONFIG_VALUE(GLX_VISUAL_ID);
|
||||||
|
puts("}");
|
||||||
|
|
||||||
|
#undef PRINT_GLXFBCONFIG_VALUE
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Display* display = XOpenDisplay(NULL);
|
Display* display = XOpenDisplay(NULL);
|
||||||
if (display == NULL) {
|
if (display == NULL) {
|
||||||
@@ -276,7 +344,6 @@ int main() {
|
|||||||
printf(" %s\n", DynString_c_str(glx_extensions + i));
|
printf(" %s\n", DynString_c_str(glx_extensions + i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// XVisualInfo visual_info = { 0 };
|
// XVisualInfo visual_info = { 0 };
|
||||||
// Status xstatus = XMatchVisualInfo(display, DefaultScreen(display), 32, TrueColor, &visual_info);
|
// Status xstatus = XMatchVisualInfo(display, DefaultScreen(display), 32, TrueColor, &visual_info);
|
||||||
// if (xstatus == 0) {
|
// if (xstatus == 0) {
|
||||||
|
|||||||
20
tests/main.c
20
tests/main.c
@@ -11,7 +11,7 @@ void test_DynString_alloc(void** state) {
|
|||||||
|
|
||||||
assert_memory_equal(dstr.data, c_str, c_str_len + 1);
|
assert_memory_equal(dstr.data, c_str, c_str_len + 1);
|
||||||
assert_true(dstr.len == c_str_len);
|
assert_true(dstr.len == c_str_len);
|
||||||
assert_true(dstr.capacity == c_str_len);
|
assert_true(dstr.capacity == c_str_len + 1);
|
||||||
|
|
||||||
free(dstr.data);
|
free(dstr.data);
|
||||||
}
|
}
|
||||||
@@ -114,6 +114,24 @@ void test_DynString_split(void** state) {
|
|||||||
assert_true(arr_len == 2);
|
assert_true(arr_len == 2);
|
||||||
assert_string_equal(DynString_c_str(arr), "Hello");
|
assert_string_equal(DynString_c_str(arr), "Hello");
|
||||||
assert_string_equal(DynString_c_str(arr + 1), "World");
|
assert_string_equal(DynString_c_str(arr + 1), "World");
|
||||||
|
DynString_free(&dstr);
|
||||||
|
for (size_t i = 0; i < arr_len; i++) {
|
||||||
|
DynString_free(arr + i);
|
||||||
|
}
|
||||||
|
arr = NULL;
|
||||||
|
|
||||||
|
dstr = DynString_alloc(" Hello World", strlen(" Hello World"));
|
||||||
|
arr_len = 0;
|
||||||
|
arr = DynString_split(&dstr, " ", &arr_len);
|
||||||
|
assert_true(arr_len == 3);
|
||||||
|
assert_string_equal(DynString_c_str(arr), "");
|
||||||
|
assert_string_equal(DynString_c_str(arr + 1), "Hello");
|
||||||
|
assert_string_equal(DynString_c_str(arr + 2), "World");
|
||||||
|
DynString_free(&dstr);
|
||||||
|
for (size_t i = 0; i < arr_len; i++) {
|
||||||
|
DynString_free(arr + i);
|
||||||
|
}
|
||||||
|
arr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|||||||
Reference in New Issue
Block a user