vrchess

changeset 8:90abf4b93cc9

fixed line endings fixed viewport when returning to original framebuffer
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 22 Aug 2014 17:24:43 +0300
parents bd8202d6d28d
children c2eecf764daa
files src/game.cc src/vr/opt.c src/vr/opt.h src/vr/vr.c src/vr/vr_impl.h src/vr/vr_libovr.c src/vr/vr_null.c
diffstat 7 files changed, 138 insertions(+), 115 deletions(-) [+]
line diff
     1.1 --- a/src/game.cc	Fri Aug 22 16:55:16 2014 +0300
     1.2 +++ b/src/game.cc	Fri Aug 22 17:24:43 2014 +0300
     1.3 @@ -102,6 +102,8 @@
     1.4  	vr_end();
     1.5  
     1.6  	glBindFramebuffer(GL_FRAMEBUFFER, 0);
     1.7 +	glViewport(0, 0, fb_width, fb_height);
     1.8 +
     1.9  	vr_output_texture(rtarg->get_texture_id(), 0, 0, (float)rtwidth / (float)rtarg->get_width(),
    1.10  		(float)rtheight / (float)rtarg->get_height());
    1.11  }
     2.1 --- a/src/vr/opt.c	Fri Aug 22 16:55:16 2014 +0300
     2.2 +++ b/src/vr/opt.c	Fri Aug 22 17:24:43 2014 +0300
     2.3 @@ -1,81 +1,77 @@
     2.4 -#include <stdio.h>
     2.5 -#include <stdlib.h>
     2.6 -#include <string.h>
     2.7 -#include <errno.h>
     2.8 -#include "opt.h"
     2.9 -#include "rbtree.h"
    2.10 -
    2.11 -static void opt_del_func(void *opt, void *cls)
    2.12 -{
    2.13 -	free(opt);
    2.14 -}
    2.15 -
    2.16 -void *create_options(void)
    2.17 -{
    2.18 -	struct rbtree *db = rb_create(RB_KEY_STRING);
    2.19 -	rb_set_delete_func(db, opt_del_func, 0);
    2.20 -	return db;
    2.21 -}
    2.22 -
    2.23 -void destroy_options(void *optdb)
    2.24 -{
    2.25 -	rb_destroy(optdb);
    2.26 -}
    2.27 -
    2.28 -void set_option_int(void *optdb, const char *key, int val)
    2.29 -{
    2.30 -	struct option *opt = malloc(sizeof *opt);
    2.31 -	if(!opt) {
    2.32 -		fprintf(stderr, "failed to set option: %s: %s\n", key, strerror(errno));
    2.33 -		return;
    2.34 -	}
    2.35 -	opt->type = OTYPE_INT;
    2.36 -	opt->ival = val;
    2.37 -	opt->fval = (float)val;
    2.38 -
    2.39 -	if(rb_insert(optdb, (void*)key, opt) == -1) {
    2.40 -		fprintf(stderr, "failed to set option: %s\n", key);
    2.41 -	}
    2.42 -	printf("stored %s -> %p\n", key, opt);
    2.43 -}
    2.44 -
    2.45 -void set_option_float(void *optdb, const char *key, float val)
    2.46 -{
    2.47 -	struct option *opt = malloc(sizeof *opt);
    2.48 -	if(!opt) {
    2.49 -		fprintf(stderr, "failed to set option: %s: %s\n", key, strerror(errno));
    2.50 -		return;
    2.51 -	}
    2.52 -	opt->type = OTYPE_FLOAT;
    2.53 -	opt->fval = val;
    2.54 -	opt->ival = (int)val;
    2.55 -
    2.56 -	if(rb_insert(optdb, (void*)key, opt) == -1) {
    2.57 -		fprintf(stderr, "failed to set option: %s\n", key);
    2.58 -	}
    2.59 -	printf("stored %s -> %p\n", key, opt);
    2.60 -}
    2.61 -
    2.62 -int get_option_int(void *optdb, const char *key, int *val)
    2.63 -{
    2.64 -	struct option *opt = rb_find(optdb, (void*)key);
    2.65 -	if(!opt) {
    2.66 -		*val = 0;
    2.67 -		return -1;
    2.68 -	}
    2.69 -	printf("got %s -> %p\n", key, opt);
    2.70 -	*val = opt->ival;
    2.71 -	return 0;
    2.72 -}
    2.73 -
    2.74 -int get_option_float(void *optdb, const char *key, float *val)
    2.75 -{
    2.76 -	struct option *opt = rb_find(optdb, (void*)key);
    2.77 -	if(!opt) {
    2.78 -		*val = 0.0f;
    2.79 -		return -1;
    2.80 -	}
    2.81 -	printf("got %s -> %p\n", key, opt);
    2.82 -	*val = opt->fval;
    2.83 -	return 0;
    2.84 -}
    2.85 +#include <stdio.h>
    2.86 +#include <stdlib.h>
    2.87 +#include <string.h>
    2.88 +#include <errno.h>
    2.89 +#include "opt.h"
    2.90 +#include "rbtree.h"
    2.91 +
    2.92 +static void opt_del_func(void *opt, void *cls)
    2.93 +{
    2.94 +	free(opt);
    2.95 +}
    2.96 +
    2.97 +void *create_options(void)
    2.98 +{
    2.99 +	struct rbtree *db = rb_create(RB_KEY_STRING);
   2.100 +	rb_set_delete_func(db, opt_del_func, 0);
   2.101 +	return db;
   2.102 +}
   2.103 +
   2.104 +void destroy_options(void *optdb)
   2.105 +{
   2.106 +	rb_destroy(optdb);
   2.107 +}
   2.108 +
   2.109 +void set_option_int(void *optdb, const char *key, int val)
   2.110 +{
   2.111 +	struct option *opt = malloc(sizeof *opt);
   2.112 +	if(!opt) {
   2.113 +		fprintf(stderr, "failed to set option: %s: %s\n", key, strerror(errno));
   2.114 +		return;
   2.115 +	}
   2.116 +	opt->type = OTYPE_INT;
   2.117 +	opt->ival = val;
   2.118 +	opt->fval = (float)val;
   2.119 +
   2.120 +	if(rb_insert(optdb, (void*)key, opt) == -1) {
   2.121 +		fprintf(stderr, "failed to set option: %s\n", key);
   2.122 +	}
   2.123 +}
   2.124 +
   2.125 +void set_option_float(void *optdb, const char *key, float val)
   2.126 +{
   2.127 +	struct option *opt = malloc(sizeof *opt);
   2.128 +	if(!opt) {
   2.129 +		fprintf(stderr, "failed to set option: %s: %s\n", key, strerror(errno));
   2.130 +		return;
   2.131 +	}
   2.132 +	opt->type = OTYPE_FLOAT;
   2.133 +	opt->fval = val;
   2.134 +	opt->ival = (int)val;
   2.135 +
   2.136 +	if(rb_insert(optdb, (void*)key, opt) == -1) {
   2.137 +		fprintf(stderr, "failed to set option: %s\n", key);
   2.138 +	}
   2.139 +}
   2.140 +
   2.141 +int get_option_int(void *optdb, const char *key, int *val)
   2.142 +{
   2.143 +	struct option *opt = rb_find(optdb, (void*)key);
   2.144 +	if(!opt) {
   2.145 +		*val = 0;
   2.146 +		return -1;
   2.147 +	}
   2.148 +	*val = opt->ival;
   2.149 +	return 0;
   2.150 +}
   2.151 +
   2.152 +int get_option_float(void *optdb, const char *key, float *val)
   2.153 +{
   2.154 +	struct option *opt = rb_find(optdb, (void*)key);
   2.155 +	if(!opt) {
   2.156 +		*val = 0.0f;
   2.157 +		return -1;
   2.158 +	}
   2.159 +	*val = opt->fval;
   2.160 +	return 0;
   2.161 +}
     3.1 --- a/src/vr/opt.h	Fri Aug 22 16:55:16 2014 +0300
     3.2 +++ b/src/vr/opt.h	Fri Aug 22 17:24:43 2014 +0300
     3.3 @@ -1,21 +1,21 @@
     3.4 -#ifndef OPT_H_
     3.5 -#define OPT_H_
     3.6 -
     3.7 -enum opt_type { OTYPE_INT, OTYPE_FLOAT };
     3.8 -
     3.9 -struct option {
    3.10 -	enum opt_type type;
    3.11 -	int ival;
    3.12 -	float fval;
    3.13 -};
    3.14 -
    3.15 -void *create_options(void);
    3.16 -void destroy_options(void *optdb);
    3.17 -
    3.18 -void set_option_int(void *optdb, const char *key, int val);
    3.19 -void set_option_float(void *optdb, const char *key, float val);
    3.20 -
    3.21 -int get_option_int(void *optdb, const char *key, int *val);
    3.22 -int get_option_float(void *optdb, const char *key, float *val);
    3.23 -
    3.24 -#endif	/* OPT_H_ */
    3.25 \ No newline at end of file
    3.26 +#ifndef OPT_H_
    3.27 +#define OPT_H_
    3.28 +
    3.29 +enum opt_type { OTYPE_INT, OTYPE_FLOAT };
    3.30 +
    3.31 +struct option {
    3.32 +	enum opt_type type;
    3.33 +	int ival;
    3.34 +	float fval;
    3.35 +};
    3.36 +
    3.37 +void *create_options(void);
    3.38 +void destroy_options(void *optdb);
    3.39 +
    3.40 +void set_option_int(void *optdb, const char *key, int val);
    3.41 +void set_option_float(void *optdb, const char *key, float val);
    3.42 +
    3.43 +int get_option_int(void *optdb, const char *key, int *val);
    3.44 +int get_option_float(void *optdb, const char *key, float *val);
    3.45 +
    3.46 +#endif	/* OPT_H_ */
     4.1 --- a/src/vr/vr.c	Fri Aug 22 16:55:16 2014 +0300
     4.2 +++ b/src/vr/vr.c	Fri Aug 22 17:24:43 2014 +0300
     4.3 @@ -4,6 +4,9 @@
     4.4  #include "vr_impl.h"
     4.5  
     4.6  
     4.7 +static void swap_buffers(void);
     4.8 +
     4.9 +
    4.10  static struct vr_module *vrm;
    4.11  static float idmat[] = {
    4.12  	1, 0, 0, 0,
    4.13 @@ -176,13 +179,18 @@
    4.14  
    4.15  int vr_swap_buffers(void)
    4.16  {
    4.17 +	int res = 0;
    4.18 +
    4.19  	if(vrm && vrm->present) {
    4.20 -		vrm->present();
    4.21 -		return 1;
    4.22 +		res = vrm->present();
    4.23 +	}
    4.24 +
    4.25 +	if(!res) {
    4.26 +		swap_buffers();
    4.27  	}
    4.28  	return 0;
    4.29  }
    4.30 -
    4.31 +
    4.32  void vr_output_texture(unsigned int tex, float umin, float vmin, float umax, float vmax)
    4.33  {
    4.34  	float halfu = (umax + umin) * 0.5f;
    4.35 @@ -203,4 +211,24 @@
    4.36  	if(vrm && vrm->recenter) {
    4.37  		vrm->recenter();
    4.38  	}
    4.39 -}
    4.40 \ No newline at end of file
    4.41 +}
    4.42 +
    4.43 +
    4.44 +#ifdef __unix__
    4.45 +#include <GL/glx.h>
    4.46 +
    4.47 +static void swap_buffers(void)
    4.48 +{
    4.49 +	glXSwapBuffers(glXGetCurrentDisplay(), glXGetCurrentDrawable());
    4.50 +}
    4.51 +
    4.52 +#endif
    4.53 +
    4.54 +#ifdef WIN32
    4.55 +#include <windows.h>
    4.56 +
    4.57 +static void swap_buffers(void)
    4.58 +{
    4.59 +	SwapBuffers(wglGetCurrentDC());
    4.60 +}
    4.61 +#endif
     5.1 --- a/src/vr/vr_impl.h	Fri Aug 22 16:55:16 2014 +0300
     5.2 +++ b/src/vr/vr_impl.h	Fri Aug 22 17:24:43 2014 +0300
     5.3 @@ -20,7 +20,7 @@
     5.4  
     5.5  	void (*begin)(int eye);
     5.6  	void (*end)(void);
     5.7 -	void (*present)(void);
     5.8 +	int (*present)(void);
     5.9  
    5.10  	void (*set_eye_texture)(int eye, unsigned int tex, float umin, float vmin, float umax, float vmax);
    5.11  
     6.1 --- a/src/vr/vr_libovr.c	Fri Aug 22 16:55:16 2014 +0300
     6.2 +++ b/src/vr/vr_libovr.c	Fri Aug 22 17:24:43 2014 +0300
     6.3 @@ -205,12 +205,14 @@
     6.4  	}
     6.5  }
     6.6  
     6.7 -static void present(void)
     6.8 +static int present(void)
     6.9  {
    6.10  	if(!hmd) return;
    6.11  
    6.12  	ovrHmd_EndFrame(hmd, pose, &eye_tex[0].Texture);
    6.13  	new_frame = 1;
    6.14 +
    6.15 +	return 1;
    6.16  }
    6.17  
    6.18  static void set_eye_texture(int eye, unsigned int tex, float umin, float vmin, float umax, float vmax)
     7.1 --- a/src/vr/vr_null.c	Fri Aug 22 16:55:16 2014 +0300
     7.2 +++ b/src/vr/vr_null.c	Fri Aug 22 17:24:43 2014 +0300
     7.3 @@ -2,13 +2,11 @@
     7.4  #define WIN32_LEAN_AND_MEAN
     7.5  #include <windows.h>
     7.6  #endif
     7.7 -
     7.8  #ifdef __APPLE__
     7.9  #include <OpenGL/gl.h>
    7.10  #else
    7.11  #include <GL/gl.h>
    7.12  #endif
    7.13 -
    7.14  #include "vr_impl.h"
    7.15  
    7.16  static unsigned int eye_tex[2];
    7.17 @@ -20,7 +18,7 @@
    7.18  	return 0;
    7.19  }
    7.20  
    7.21 -static void present(void)
    7.22 +static int present(void)
    7.23  {
    7.24  	int i;
    7.25  
    7.26 @@ -61,10 +59,7 @@
    7.27  	glPopMatrix();
    7.28  
    7.29  	glPopAttrib();
    7.30 -
    7.31 -#ifdef WIN32
    7.32 -	SwapBuffers(wglGetCurrentDC());
    7.33 -#endif
    7.34 +	return 0;
    7.35  }
    7.36  
    7.37  static void set_eye_texture(int eye, unsigned int tex, float umin, float vmin, float umax, float vmax)