Open Broadcaster Software
Free, open source software for live streaming and recording
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
graphics.h
Go to the documentation of this file.
1 /******************************************************************************
2  Copyright (C) 2013 by Hugh Bailey <obs.jim@gmail.com>
3 
4  This program is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see <http://www.gnu.org/licenses/>.
16 ******************************************************************************/
17 
18 #pragma once
19 
20 #include "../util/bmem.h"
21 #include "input.h"
22 #ifdef __APPLE__
23 #include <objc/objc-runtime.h>
24 #endif
25 
26 /*
27  * This is an API-independent graphics subsystem wrapper.
28  *
29  * This allows the use of OpenGL and different Direct3D versions through
30  * one shared interface.
31  */
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 #define GS_MAX_TEXTURES 8
38 
39 struct vec2;
40 struct vec3;
41 struct vec4;
42 struct quat;
43 struct axisang;
44 struct plane;
45 struct matrix3;
46 struct matrix4;
47 
54 };
55 
75 };
76 
83 };
84 
88 };
89 
94 };
95 
108 };
109 
119 };
120 
125 };
126 
134 };
135 
143 };
144 
155 };
156 
163 };
164 
169 };
170 
173  long x;
174  long y;
175  long cx;
176  long cy;
177 };
178 
180  size_t width;
181  void *array;
182 };
183 
184 struct gs_vb_data {
185  size_t num;
186  struct vec3 *points;
187  struct vec3 *normals;
188  struct vec3 *tangents;
190 
191  size_t num_tex;
193 };
194 
195 static inline struct gs_vb_data *gs_vbdata_create(void)
196 {
197  return (struct gs_vb_data*)bzalloc(sizeof(struct gs_vb_data));
198 }
199 
200 static inline void gs_vbdata_destroy(struct gs_vb_data *data)
201 {
202  uint32_t i;
203  if (!data)
204  return;
205 
206  bfree(data->points);
207  bfree(data->normals);
208  bfree(data->tangents);
209  bfree(data->colors);
210  for (i = 0; i < data->num_tex; i++)
211  bfree(data->tvarray[i].array);
212  bfree(data->tvarray);
213  bfree(data);
214 }
215 
223 };
224 
230 };
231 
232 struct gs_rect {
233  int x;
234  int y;
235  int cx;
236  int cy;
237 };
238 
239 /* wrapped opaque data types */
240 
241 struct gs_texture;
242 struct gs_stage_surface;
243 struct gs_zstencil_buffer;
244 struct gs_vertex_buffer;
245 struct gs_index_buffer;
246 struct gs_sampler_state;
247 struct gs_shader;
248 struct gs_swap_chain;
249 struct gs_texrender;
250 struct gs_shader_param;
251 struct gs_effect;
252 struct gs_effect_technique;
253 struct gs_effect_pass;
254 struct gs_effect_param;
255 struct gs_device;
256 struct graphics_subsystem;
257 
258 typedef struct gs_texture gs_texture_t;
259 typedef struct gs_stage_surface gs_stagesurf_t;
260 typedef struct gs_zstencil_buffer gs_zstencil_t;
261 typedef struct gs_vertex_buffer gs_vertbuffer_t;
262 typedef struct gs_index_buffer gs_indexbuffer_t;
263 typedef struct gs_sampler_state gs_samplerstate_t;
264 typedef struct gs_swap_chain gs_swapchain_t;
265 typedef struct gs_texture_render gs_texrender_t;
266 typedef struct gs_shader gs_shader_t;
267 typedef struct gs_shader_param gs_sparam_t;
268 typedef struct gs_effect gs_effect_t;
271 typedef struct gs_device gs_device_t;
273 
274 /* ---------------------------------------------------
275  * shader functions
276  * --------------------------------------------------- */
277 
292 };
293 
296  const char *name;
297 };
298 
302 };
303 
304 EXPORT void gs_shader_destroy(gs_shader_t *shader);
305 
306 EXPORT int gs_shader_get_num_params(const gs_shader_t *shader);
308  uint32_t param);
310  const char *name);
311 
314 
316  struct gs_shader_param_info *info);
317 EXPORT void gs_shader_set_bool(gs_sparam_t *param, bool val);
318 EXPORT void gs_shader_set_float(gs_sparam_t *param, float val);
319 EXPORT void gs_shader_set_int(gs_sparam_t *param, int val);
320 EXPORT void gs_shader_set_matrix3(gs_sparam_t *param, const struct matrix3 *val);
321 EXPORT void gs_shader_set_matrix4(gs_sparam_t *param, const struct matrix4 *val);
322 EXPORT void gs_shader_set_vec2(gs_sparam_t *param, const struct vec2 *val);
323 EXPORT void gs_shader_set_vec3(gs_sparam_t *param, const struct vec3 *val);
324 EXPORT void gs_shader_set_vec4(gs_sparam_t *param, const struct vec4 *val);
326 EXPORT void gs_shader_set_val(gs_sparam_t *param, const void *val, size_t size);
329  gs_samplerstate_t *sampler);
330 
331 /* ---------------------------------------------------
332  * effect functions
333  * --------------------------------------------------- */
334 
335 /*enum gs_effect_property_type {
336  GS_EFFECT_NONE,
337  GS_EFFECT_BOOL,
338  GS_EFFECT_FLOAT,
339  GS_EFFECT_COLOR,
340  GS_EFFECT_TEXTURE
341 };*/
342 
344  const char *name;
346 
347  /* const char *full_name;
348  enum gs_effect_property_type prop_type;
349 
350  float min, max, inc, mul; */
351 };
352 
353 EXPORT void gs_effect_destroy(gs_effect_t *effect);
354 
356  const char *name);
357 
359  const gs_effect_t *effect);
360 
361 EXPORT size_t gs_technique_begin(gs_technique_t *technique);
362 EXPORT void gs_technique_end(gs_technique_t *technique);
363 EXPORT bool gs_technique_begin_pass(gs_technique_t *technique, size_t pass);
365  const char *name);
367 
368 EXPORT size_t gs_effect_get_num_params(const gs_effect_t *effect);
370  size_t param);
372  const char *name);
373 
377 EXPORT bool gs_effect_loop(gs_effect_t *effect, const char *name);
378 
381 
384 
386  struct gs_effect_param_info *info);
387 EXPORT void gs_effect_set_bool(gs_eparam_t *param, bool val);
388 EXPORT void gs_effect_set_float(gs_eparam_t *param, float val);
389 EXPORT void gs_effect_set_int(gs_eparam_t *param, int val);
391  const struct matrix4 *val);
392 EXPORT void gs_effect_set_vec2(gs_eparam_t *param, const struct vec2 *val);
393 EXPORT void gs_effect_set_vec3(gs_eparam_t *param, const struct vec3 *val);
394 EXPORT void gs_effect_set_vec4(gs_eparam_t *param, const struct vec4 *val);
396 EXPORT void gs_effect_set_val(gs_eparam_t *param, const void *val, size_t size);
399  gs_samplerstate_t *sampler);
400 
401 /* ---------------------------------------------------
402  * texture render helper functions
403  * --------------------------------------------------- */
404 
406  enum gs_zstencil_format zsformat);
409  uint32_t cy);
410 EXPORT void gs_texrender_end(gs_texrender_t *texrender);
411 EXPORT void gs_texrender_reset(gs_texrender_t *texrender);
413 
414 /* ---------------------------------------------------
415  * graphics subsystem
416  * --------------------------------------------------- */
417 
418 #define GS_BUILD_MIPMAPS (1<<0)
419 #define GS_DYNAMIC (1<<1)
420 #define GS_RENDER_TARGET (1<<2)
421 #define GS_GL_DUMMYTEX (1<<3)
423 /* ---------------- */
424 /* global functions */
425 
426 #define GS_SUCCESS 0
427 #define GS_ERROR_FAIL -1
428 #define GS_ERROR_MODULE_NOT_FOUND -2
429 #define GS_ERROR_NOT_SUPPORTED -3
430 
431 struct gs_window {
432 #if defined(_WIN32)
433  void *hwnd;
434 #elif defined(__APPLE__)
435  __unsafe_unretained id view;
436 #elif defined(__linux__) || defined(__FreeBSD__)
437  /* I'm not sure how portable defining id to uint32_t is. */
438  uint32_t id;
439  void* display;
440 #endif
441 };
442 
443 struct gs_init_data {
450 };
451 
452 #define GS_DEVICE_OPENGL 1
453 #define GS_DEVICE_DIRECT3D_11 2
454 
455 EXPORT const char *gs_get_device_name(void);
456 EXPORT int gs_get_device_type(void);
458  bool (*callback)(void *param, const char *name, uint32_t id),
459  void *param);
460 
461 EXPORT int gs_create(graphics_t **graphics, const char *module,
462  uint32_t adapter);
463 EXPORT void gs_destroy(graphics_t *graphics);
464 
465 EXPORT void gs_enter_context(graphics_t *graphics);
466 EXPORT void gs_leave_context(void);
468 
469 EXPORT void gs_matrix_push(void);
470 EXPORT void gs_matrix_pop(void);
471 EXPORT void gs_matrix_identity(void);
472 EXPORT void gs_matrix_transpose(void);
473 EXPORT void gs_matrix_set(const struct matrix4 *matrix);
474 EXPORT void gs_matrix_get(struct matrix4 *dst);
475 EXPORT void gs_matrix_mul(const struct matrix4 *matrix);
476 EXPORT void gs_matrix_rotquat(const struct quat *rot);
477 EXPORT void gs_matrix_rotaa(const struct axisang *rot);
478 EXPORT void gs_matrix_translate(const struct vec3 *pos);
479 EXPORT void gs_matrix_scale(const struct vec3 *scale);
480 EXPORT void gs_matrix_rotaa4f(float x, float y, float z, float angle);
481 EXPORT void gs_matrix_translate3f(float x, float y, float z);
482 EXPORT void gs_matrix_scale3f(float x, float y, float z);
483 
484 EXPORT void gs_render_start(bool b_new);
485 EXPORT void gs_render_stop(enum gs_draw_mode mode);
487 EXPORT void gs_vertex2f(float x, float y);
488 EXPORT void gs_vertex3f(float x, float y, float z);
489 EXPORT void gs_normal3f(float x, float y, float z);
490 EXPORT void gs_color(uint32_t color);
491 EXPORT void gs_texcoord(float x, float y, int unit);
492 EXPORT void gs_vertex2v(const struct vec2 *v);
493 EXPORT void gs_vertex3v(const struct vec3 *v);
494 EXPORT void gs_normal3v(const struct vec3 *v);
495 EXPORT void gs_color4v(const struct vec4 *v);
496 EXPORT void gs_texcoord2v(const struct vec2 *v, int unit);
497 
500 
502  char **error_string);
503 EXPORT gs_effect_t *gs_effect_create(const char *effect_string,
504  const char *filename, char **error_string);
505 
507  char **error_string);
509  char **error_string);
510 
512 EXPORT uint8_t *gs_create_texture_file_data(const char *file,
513  enum gs_color_format *format, uint32_t *cx, uint32_t *cy);
514 
515 #define GS_FLIP_U (1<<0)
516 #define GS_FLIP_V (1<<1)
517 
525 EXPORT void gs_draw_sprite(gs_texture_t *tex, uint32_t flip, uint32_t width,
526  uint32_t height);
527 
529  uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
530 
531 EXPORT void gs_draw_cube_backdrop(gs_texture_t *cubetex, const struct quat *rot,
532  float left, float right, float top, float bottom, float znear);
533 
535 EXPORT void gs_reset_viewport(void);
536 
538 EXPORT void gs_set_2d_mode(void);
540 EXPORT void gs_set_3d_mode(double fovy, double znear, double zvar);
541 
542 EXPORT void gs_viewport_push(void);
543 EXPORT void gs_viewport_pop(void);
544 
545 EXPORT void gs_texture_set_image(gs_texture_t *tex, const uint8_t *data,
546  uint32_t linesize, bool invert);
548  const void *data, uint32_t linesize, bool invert);
549 
550 EXPORT void gs_perspective(float fovy, float aspect, float znear, float zfar);
551 
552 EXPORT void gs_blend_state_push(void);
553 EXPORT void gs_blend_state_pop(void);
554 EXPORT void gs_reset_blend_state(void);
555 
556 /* -------------------------- */
557 /* library-specific functions */
558 
560 
561 EXPORT void gs_resize(uint32_t x, uint32_t y);
562 EXPORT void gs_get_size(uint32_t *x, uint32_t *y);
565 
567  enum gs_color_format color_format, uint32_t levels,
568  const uint8_t **data, uint32_t flags);
570  enum gs_color_format color_format, uint32_t levels,
571  const uint8_t **data, uint32_t flags);
573  uint32_t depth, enum gs_color_format color_format,
574  uint32_t levels, const uint8_t **data, uint32_t flags);
575 
577  enum gs_zstencil_format format);
578 
580  enum gs_color_format color_format);
581 
583  const struct gs_sampler_info *info);
584 
585 EXPORT gs_shader_t *gs_vertexshader_create(const char *shader,
586  const char *file, char **error_string);
587 EXPORT gs_shader_t *gs_pixelshader_create(const char *shader,
588  const char *file, char **error_string);
589 
591  uint32_t flags);
593  void *indices, size_t num, uint32_t flags);
594 
596 
598 EXPORT void gs_load_indexbuffer(gs_indexbuffer_t *indexbuffer);
599 EXPORT void gs_load_texture(gs_texture_t *tex, int unit);
600 EXPORT void gs_load_samplerstate(gs_samplerstate_t *samplerstate, int unit);
601 EXPORT void gs_load_vertexshader(gs_shader_t *vertshader);
602 EXPORT void gs_load_pixelshader(gs_shader_t *pixelshader);
603 
604 EXPORT void gs_load_default_samplerstate(bool b_3d, int unit);
605 
608 
611 
613 EXPORT void gs_set_cube_render_target(gs_texture_t *cubetex, int side,
614  gs_zstencil_t *zstencil);
615 
618  gs_texture_t *dst, uint32_t dst_x, uint32_t dst_y,
619  gs_texture_t *src, uint32_t src_x, uint32_t src_y,
620  uint32_t src_w, uint32_t src_h);
622 
623 EXPORT void gs_begin_scene(void);
624 EXPORT void gs_draw(enum gs_draw_mode draw_mode, uint32_t start_vert,
625  uint32_t num_verts);
626 EXPORT void gs_end_scene(void);
627 
628 #define GS_CLEAR_COLOR (1<<0)
629 #define GS_CLEAR_DEPTH (1<<1)
630 #define GS_CLEAR_STENCIL (1<<2)
631 
632 EXPORT void gs_load_swapchain(gs_swapchain_t *swapchain);
633 EXPORT void gs_clear(uint32_t clear_flags, const struct vec4 *color,
634  float depth, uint8_t stencil);
635 EXPORT void gs_present(void);
636 EXPORT void gs_flush(void);
637 
638 EXPORT void gs_set_cull_mode(enum gs_cull_mode mode);
640 
641 EXPORT void gs_enable_blending(bool enable);
642 EXPORT void gs_enable_depth_test(bool enable);
643 EXPORT void gs_enable_stencil_test(bool enable);
644 EXPORT void gs_enable_stencil_write(bool enable);
645 EXPORT void gs_enable_color(bool red, bool green, bool blue, bool alpha);
646 
647 EXPORT void gs_blend_function(enum gs_blend_type src, enum gs_blend_type dest);
649  enum gs_blend_type src_c, enum gs_blend_type dest_c,
650  enum gs_blend_type src_a, enum gs_blend_type dest_a);
651 EXPORT void gs_depth_function(enum gs_depth_test test);
652 
654  enum gs_depth_test test);
655 EXPORT void gs_stencil_op(enum gs_stencil_side side,
656  enum gs_stencil_op_type fail,
657  enum gs_stencil_op_type zfail,
658  enum gs_stencil_op_type zpass);
659 
660 EXPORT void gs_set_viewport(int x, int y, int width, int height);
661 EXPORT void gs_get_viewport(struct gs_rect *rect);
662 EXPORT void gs_set_scissor_rect(const struct gs_rect *rect);
663 
664 EXPORT void gs_ortho(float left, float right, float top, float bottom,
665  float znear, float zfar);
666 EXPORT void gs_frustum(float left, float right, float top, float bottom,
667  float znear, float zfar);
668 
669 EXPORT void gs_projection_push(void);
670 EXPORT void gs_projection_pop(void);
671 
673 
678  const gs_texture_t *tex);
679 EXPORT bool gs_texture_map(gs_texture_t *tex, uint8_t **ptr,
680  uint32_t *linesize);
685 EXPORT bool gs_texture_is_rect(const gs_texture_t *tex);
691 
695  const gs_texture_t *cubetex);
696 
702  const gs_texture_t *voltex);
703 
708  const gs_stagesurf_t *stagesurf);
709 EXPORT bool gs_stagesurface_map(gs_stagesurf_t *stagesurf, uint8_t **data,
710  uint32_t *linesize);
712 
714 
716 
720  const gs_vertbuffer_t *vertbuffer);
721 
723 EXPORT void gs_indexbuffer_flush(gs_indexbuffer_t *indexbuffer);
724 EXPORT void *gs_indexbuffer_get_data(const gs_indexbuffer_t *indexbuffer);
726  const gs_indexbuffer_t *indexbuffer);
728  const gs_indexbuffer_t *indexbuffer);
729 
730 #ifdef __APPLE__
731 
734 EXPORT gs_texture_t *gs_texture_create_from_iosurface(void *iosurf);
735 EXPORT bool gs_texture_rebind_iosurface(gs_texture_t *texture,
736  void *iosurf);
737 
738 #elif _WIN32
739 
740 EXPORT bool gs_gdi_texture_available(void);
741 EXPORT bool gs_shared_texture_available(void);
742 
743 struct gs_duplicator;
744 typedef struct gs_duplicator gs_duplicator_t;
745 
750 EXPORT bool gs_get_duplicator_monitor_info(int monitor_idx,
751  struct gs_monitor_info *monitor_info);
752 
754 EXPORT gs_duplicator_t *gs_duplicator_create(int monitor_idx);
755 EXPORT void gs_duplicator_destroy(gs_duplicator_t *duplicator);
756 
757 EXPORT bool gs_duplicator_update_frame(gs_duplicator_t *duplicator);
758 EXPORT gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator);
759 
761 EXPORT gs_texture_t *gs_texture_create_gdi(uint32_t width, uint32_t height);
762 
763 EXPORT void *gs_texture_get_dc(gs_texture_t *gdi_tex);
764 EXPORT void gs_texture_release_dc(gs_texture_t *gdi_tex);
765 
767 EXPORT gs_texture_t *gs_texture_open_shared(uint32_t handle);
768 #endif
769 
770 /* inline functions used by modules */
771 
772 static inline uint32_t gs_get_format_bpp(enum gs_color_format format)
773 {
774  switch (format) {
775  case GS_A8: return 8;
776  case GS_R8: return 8;
777  case GS_RGBA: return 32;
778  case GS_BGRX: return 32;
779  case GS_BGRA: return 32;
780  case GS_R10G10B10A2: return 32;
781  case GS_RGBA16: return 64;
782  case GS_R16: return 16;
783  case GS_RGBA16F: return 64;
784  case GS_RGBA32F: return 128;
785  case GS_RG16F: return 32;
786  case GS_RG32F: return 64;
787  case GS_R16F: return 16;
788  case GS_R32F: return 32;
789  case GS_DXT1: return 4;
790  case GS_DXT3: return 8;
791  case GS_DXT5: return 8;
792  case GS_UNKNOWN: return 0;
793  }
794 
795  return 0;
796 }
797 
798 static inline bool gs_is_compressed_format(enum gs_color_format format)
799 {
800  return (format == GS_DXT1 || format == GS_DXT3 || format == GS_DXT5);
801 }
802 
803 static inline uint32_t gs_get_total_levels(uint32_t width, uint32_t height)
804 {
805  uint32_t size = width > height ? width : height;
806  uint32_t num_levels = 0;
807 
808  while (size > 1) {
809  size /= 2;
810  num_levels++;
811  }
812 
813  return num_levels;
814 }
815 
816 #ifdef __cplusplus
817 }
818 #endif
EXPORT void gs_texture_unmap(gs_texture_t *tex)
Definition: graphics.h:50
Definition: graphics.h:80
EXPORT gs_sparam_t * gs_shader_get_viewproj_matrix(const gs_shader_t *shader)
struct vec3 * points
Definition: graphics.h:186
Definition: graphics.h:60
EXPORT gs_shader_t * gs_pixelshader_create_from_file(const char *file, char **error_string)
Definition: graphics.h:111
EXPORT void gs_effect_set_vec4(gs_eparam_t *param, const struct vec4 *val)
EXPORT void gs_stagesurface_unmap(gs_stagesurf_t *stagesurf)
Definition: graphics.h:71
uint32_t cx
Definition: graphics.h:445
EXPORT void gs_frustum(float left, float right, float top, float bottom, float znear, float zfar)
EXPORT void gs_load_swapchain(gs_swapchain_t *swapchain)
gs_texture_type
Definition: graphics.h:165
EXPORT void gs_effect_set_texture(gs_eparam_t *param, gs_texture_t *val)
enum gs_address_mode address_w
Definition: graphics.h:220
Definition: graphics.h:283
Definition: graphics.h:67
struct input_subsystem input_t
Definition: input.h:146
Definition: graphics.h:167
EXPORT gs_sparam_t * gs_shader_get_param_by_idx(gs_shader_t *shader, uint32_t param)
Definition: axisang.h:28
EXPORT void gs_shader_set_matrix3(gs_sparam_t *param, const struct matrix3 *val)
EXPORT gs_vertbuffer_t * gs_vertexbuffer_create(struct gs_vb_data *data, uint32_t flags)
struct gs_tvertarray * tvarray
Definition: graphics.h:192
EXPORT void gs_shader_destroy(gs_shader_t *shader)
int cx
Definition: graphics.h:235
EXPORT void gs_blend_function(enum gs_blend_type src, enum gs_blend_type dest)
EXPORT void gs_set_viewport(int x, int y, int width, int height)
EXPORT void gs_blend_function_separate(enum gs_blend_type src_c, enum gs_blend_type dest_c, enum gs_blend_type src_a, enum gs_blend_type dest_a)
EXPORT void gs_enable_depth_test(bool enable)
Definition: graphics.h:216
EXPORT enum gs_texture_type gs_get_texture_type(const gs_texture_t *texture)
gs_sample_filter
Definition: graphics.h:145
Definition: graphics.h:291
int x
Definition: graphics.h:233
EXPORT void gs_vertexbuffer_flush(gs_vertbuffer_t *vertbuffer)
EXPORT void gs_leave_context(void)
EXPORT void gs_reset_viewport(void)
EXPORT void gs_enable_color(bool red, bool green, bool blue, bool alpha)
EXPORT void gs_shader_set_vec2(gs_sparam_t *param, const struct vec2 *val)
EXPORT gs_texture_t * gs_cubetexture_create(uint32_t size, enum gs_color_format color_format, uint32_t levels, const uint8_t **data, uint32_t flags)
enum gs_sample_filter filter
Definition: graphics.h:217
EXPORT void gs_matrix_rotaa4f(float x, float y, float z, float angle)
EXPORT enum gs_cull_mode gs_get_cull_mode(void)
EXPORT void gs_projection_pop(void)
EXPORT void gs_normal3f(float x, float y, float z)
struct gs_shader gs_shader_t
Definition: graphics.h:266
unsigned uint32_t
Definition: vc_stdint.h:31
int cy
Definition: graphics.h:236
EXPORT void gs_samplerstate_destroy(gs_samplerstate_t *samplerstate)
size_t width
Definition: graphics.h:180
EXPORT void gs_zstencil_destroy(gs_zstencil_t *zstencil)
Definition: graphics.h:140
EXPORT gs_eparam_t * gs_effect_get_param_by_idx(const gs_effect_t *effect, size_t param)
Definition: graphics.h:58
EXPORT void gs_end_scene(void)
Definition: vec3.h:33
EXPORT void gs_set_render_target(gs_texture_t *tex, gs_zstencil_t *zstencil)
enum gs_color_format format
Definition: graphics.h:447
EXPORT gs_zstencil_t * gs_zstencil_create(uint32_t width, uint32_t height, enum gs_zstencil_format format)
struct gs_vertex_buffer gs_vertbuffer_t
Definition: graphics.h:261
EXPORT void gs_present(void)
Definition: graphics.h:148
Definition: graphics.h:72
const char * name
Definition: graphics.h:296
struct gs_stage_surface gs_stagesurf_t
Definition: graphics.h:259
EXPORT uint32_t gs_get_height(void)
struct gs_window window
Definition: graphics.h:444
EXPORT void gs_technique_end_pass(gs_technique_t *technique)
struct gs_device gs_device_t
Definition: graphics.h:271
long y
Definition: graphics.h:174
uint32_t freq
Definition: graphics.h:229
uint32_t border_color
Definition: graphics.h:222
Definition: vec2.h:27
uint32_t height
Definition: graphics.h:227
int max_anisotropy
Definition: graphics.h:221
EXPORT void gs_stencil_function(enum gs_stencil_side side, enum gs_depth_test test)
Definition: graphics.h:280
EXPORT void * gs_indexbuffer_get_data(const gs_indexbuffer_t *indexbuffer)
EXPORT void gs_resize(uint32_t x, uint32_t y)
EXPORT void gs_draw(enum gs_draw_mode draw_mode, uint32_t start_vert, uint32_t num_verts)
EXPORT void gs_matrix_rotquat(const struct quat *rot)
Definition: graphics.h:443
EXPORT void gs_shader_get_param_info(const gs_sparam_t *param, struct gs_shader_param_info *info)
EXPORT void gs_texrender_end(gs_texrender_t *texrender)
gs_stencil_side
Definition: graphics.h:121
Definition: graphics.h:287
Definition: graphics.h:279
EXPORT const char * gs_get_device_name(void)
EXPORT bool gs_texrender_begin(gs_texrender_t *texrender, uint32_t cx, uint32_t cy)
Definition: graphics.h:141
EXPORT void gs_load_default_samplerstate(bool b_3d, int unit)
EXPORT void gs_set_3d_mode(double fovy, double znear, double zvar)
Definition: graphics.h:431
struct gs_shader_param gs_sparam_t
Definition: graphics.h:267
EXPORT void gs_viewport_push(void)
gs_color_format
Definition: graphics.h:56
EXPORT void gs_load_samplerstate(gs_samplerstate_t *samplerstate, int unit)
unsigned char uint8_t
Definition: vc_stdint.h:27
const char * name
Definition: graphics.h:344
Definition: graphics.h:65
struct vec3 * tangents
Definition: graphics.h:188
Definition: graphics.h:149
Definition: graphics.h:73
EXPORT gs_shader_t * gs_vertexshader_create_from_file(const char *file, char **error_string)
EXPORT void gs_texcoord(float x, float y, int unit)
Definition: graphics.h:70
EXPORT gs_effect_t * gs_get_effect(void)
EXPORT enum gs_color_format gs_voltexture_get_color_format(const gs_texture_t *voltex)
Definition: graphics.h:116
EXPORT void gs_projection_push(void)
EXPORT void gs_voltexture_destroy(gs_texture_t *voltex)
EXPORT void gs_draw_sprite_subregion(gs_texture_t *tex, uint32_t flip, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
Definition: graphics.h:138
Definition: matrix3.h:31
Definition: graphics.h:159
EXPORT uint32_t gs_get_width(void)
Definition: graphics.h:91
EXPORT enum gs_color_format gs_texture_get_color_format(const gs_texture_t *tex)
EXPORT void gs_color4v(const struct vec4 *v)
Definition: graphics.h:290
EXPORT void gs_render_start(bool b_new)
EXPORT bool gs_technique_begin_pass_by_name(gs_technique_t *technique, const char *name)
Definition: graphics.h:63
EXPORT void gs_matrix_transpose(void)
EXPORT gs_texture_t * gs_get_render_target(void)
EXPORT void gs_indexbuffer_flush(gs_indexbuffer_t *indexbuffer)
Definition: graphics.h:79
EXPORT void gs_indexbuffer_destroy(gs_indexbuffer_t *indexbuffer)
EXPORT void gs_vertex3v(const struct vec3 *v)
EXPORT void gs_viewport_pop(void)
uint32_t bits
Definition: graphics.h:228
EXPORT void gs_stagesurface_destroy(gs_stagesurf_t *stagesurf)
EXPORT void gs_shader_set_vec4(gs_sparam_t *param, const struct vec4 *val)
Definition: vec4.h:30
EXPORT bool gs_texture_map(gs_texture_t *tex, uint8_t **ptr, uint32_t *linesize)
EXPORT struct gs_vb_data * gs_vertexbuffer_get_data(const gs_vertbuffer_t *vertbuffer)
EXPORT uint32_t gs_cubetexture_get_size(const gs_texture_t *cubetex)
EXPORT void gs_shader_set_bool(gs_sparam_t *param, bool val)
Definition: graphics.h:301
enum gs_zstencil_format zsformat
Definition: graphics.h:448
Definition: graphics.h:281
gs_stencil_op_type
Definition: graphics.h:127
EXPORT void gs_matrix_scale3f(float x, float y, float z)
gs_index_type
Definition: graphics.h:85
EXPORT enum gs_color_format gs_cubetexture_get_color_format(const gs_texture_t *cubetex)
Definition: graphics.h:129
EXPORT void gs_shader_set_vec3(gs_sparam_t *param, const struct vec3 *val)
EXPORT void gs_enable_stencil_test(bool enable)
EXPORT void gs_matrix_mul(const struct matrix4 *matrix)
#define EXPORT
Definition: c99defs.h:49
EXPORT void gs_set_cull_mode(enum gs_cull_mode mode)
Definition: graphics.h:74
Definition: graphics.h:86
EXPORT bool gs_stagesurface_map(gs_stagesurf_t *stagesurf, uint8_t **data, uint32_t *linesize)
Definition: graphics.h:288
Definition: graphics.h:130
EXPORT void * gs_texture_get_obj(gs_texture_t *tex)
EXPORT void gs_matrix_translate3f(float x, float y, float z)
EXPORT uint32_t gs_texture_get_height(const gs_texture_t *tex)
Definition: graphics-internal.h:271
Definition: graphics.h:160
gs_cull_mode
Definition: graphics.h:90
EXPORT gs_sparam_t * gs_shader_get_param_by_name(gs_shader_t *shader, const char *name)
EXPORT gs_texture_t * gs_voltexture_create(uint32_t width, uint32_t height, uint32_t depth, enum gs_color_format color_format, uint32_t levels, const uint8_t **data, uint32_t flags)
EXPORT void gs_stencil_op(enum gs_stencil_side side, enum gs_stencil_op_type fail, enum gs_stencil_op_type zfail, enum gs_stencil_op_type zpass)
EXPORT bool gs_texture_is_rect(const gs_texture_t *tex)
Definition: graphics.h:113
enum gs_address_mode address_v
Definition: graphics.h:219
Definition: graphics.h:128
Definition: graphics.h:104
EXPORT void gs_set_cube_render_target(gs_texture_t *cubetex, int side, gs_zstencil_t *zstencil)
EXPORT void gs_shader_set_texture(gs_sparam_t *param, gs_texture_t *val)
Definition: effect.h:139
EXPORT void gs_texture_set_image(gs_texture_t *tex, const uint8_t *data, uint32_t linesize, bool invert)
Definition: graphics.h:142
EXPORT void gs_blend_state_push(void)
EXPORT void gs_get_viewport(struct gs_rect *rect)
gs_shader_param_type
Definition: graphics.h:278
EXPORT void gs_enter_context(graphics_t *graphics)
EXPORT gs_shader_t * gs_get_pixel_shader(void)
EXPORT void gs_shader_set_val(gs_sparam_t *param, const void *val, size_t size)
Definition: effect.h:89
Definition: graphics.h:131
Definition: graphics.h:51
EXPORT bool gs_effect_loop(gs_effect_t *effect, const char *name)
Definition: graphics.h:146
Definition: graphics.h:282
EXPORT void gs_begin_scene(void)
EXPORT uint32_t gs_stagesurface_get_height(const gs_stagesurf_t *stagesurf)
Definition: graphics.h:112
EXPORT size_t gs_indexbuffer_get_num_indices(const gs_indexbuffer_t *indexbuffer)
EXPORT void gs_matrix_pop(void)
Definition: graphics.h:103
Definition: graphics.h:123
EXPORT void gs_shader_set_next_sampler(gs_sparam_t *param, gs_samplerstate_t *sampler)
EXPORT gs_texture_t * gs_texture_create(uint32_t width, uint32_t height, enum gs_color_format color_format, uint32_t levels, const uint8_t **data, uint32_t flags)
Definition: graphics.h:225
Definition: matrix4.h:32
EXPORT size_t gs_effect_get_num_params(const gs_effect_t *effect)
struct gs_index_buffer gs_indexbuffer_t
Definition: graphics.h:262
EXPORT gs_eparam_t * gs_effect_get_param_by_name(const gs_effect_t *effect, const char *name)
EXPORT void gs_swapchain_destroy(gs_swapchain_t *swapchain)
Definition: graphics.h:114
Definition: graphics.h:139
struct gs_texture gs_texture_t
Definition: graphics.h:258
EXPORT gs_samplerstate_t * gs_samplerstate_create(const struct gs_sampler_info *info)
EXPORT void gs_copy_texture_region(gs_texture_t *dst, uint32_t dst_x, uint32_t dst_y, gs_texture_t *src, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h)
EXPORT void gs_vertex2v(const struct vec2 *v)
EXPORT void gs_effect_destroy(gs_effect_t *effect)
EXPORT void gs_shader_set_default(gs_sparam_t *param)
Definition: graphics.h:99
struct gs_zstencil_buffer gs_zstencil_t
Definition: graphics.h:260
Definition: quat.h:41
EXPORT uint32_t gs_texture_get_width(const gs_texture_t *tex)
uint32_t width
Definition: graphics.h:226
EXPORT void gs_matrix_push(void)
EXPORT gs_shader_t * gs_vertexshader_create(const char *shader, const char *file, char **error_string)
EXPORT void gs_effect_set_next_sampler(gs_eparam_t *param, gs_samplerstate_t *sampler)
EXPORT gs_shader_t * gs_pixelshader_create(const char *shader, const char *file, char **error_string)
EXPORT gs_texrender_t * gs_texrender_create(enum gs_color_format format, enum gs_zstencil_format zsformat)
Definition: graphics.h:105
size_t num_tex
Definition: graphics.h:191
EXPORT void gs_effect_set_float(gs_eparam_t *param, float val)
EXPORT bool gs_technique_begin_pass(gs_technique_t *technique, size_t pass)
int y
Definition: graphics.h:234
EXPORT int gs_shader_get_num_params(const gs_shader_t *shader)
EXPORT size_t gs_technique_begin(gs_technique_t *technique)
int rotation_degrees
Definition: graphics.h:172
EXPORT enum gs_color_format gs_stagesurface_get_color_format(const gs_stagesurf_t *stagesurf)
EXPORT gs_sparam_t * gs_shader_get_world_matrix(const gs_shader_t *shader)
Definition: graphics.h:66
EXPORT void gs_ortho(float left, float right, float top, float bottom, float znear, float zfar)
Definition: graphics.h:52
long x
Definition: graphics.h:173
Definition: graphics.h:171
Definition: graphics.h:161
EXPORT void gs_set_scissor_rect(const struct gs_rect *rect)
EXPORT void gs_shader_set_float(gs_sparam_t *param, float val)
uint32_t num_backbuffers
Definition: graphics.h:446
EXPORT gs_effect_t * gs_effect_create_from_file(const char *file, char **error_string)
EXPORT void gs_effect_set_int(gs_eparam_t *param, int val)
EXPORT input_t * gs_get_input(void)
gs_shader_type
Definition: graphics.h:299
Definition: graphics.h:152
EXPORT void gs_normal3v(const struct vec3 *v)
Definition: graphics.h:158
EXPORT uint32_t gs_stagesurface_get_width(const gs_stagesurf_t *stagesurf)
EXPORT void gs_effect_set_vec3(gs_eparam_t *param, const struct vec3 *val)
struct gs_sampler_state gs_samplerstate_t
Definition: graphics.h:263
void * array
Definition: graphics.h:181
gs_draw_mode
Definition: graphics.h:48
EXPORT int gs_get_device_type(void)
Definition: graphics.h:294
EXPORT void gs_cubetexture_destroy(gs_texture_t *cubetex)
EXPORT gs_texture_t * gs_texrender_get_texture(const gs_texrender_t *texrender)
EXPORT void gs_matrix_get(struct matrix4 *dst)
Definition: graphics.h:87
EXPORT void gs_flush(void)
EXPORT void gs_effect_set_matrix4(gs_eparam_t *param, const struct matrix4 *val)
Definition: graphics.h:284
EXPORT void gs_copy_texture(gs_texture_t *dst, gs_texture_t *src)
EXPORT enum gs_index_type gs_indexbuffer_get_type(const gs_indexbuffer_t *indexbuffer)
EXPORT uint32_t gs_voltexture_get_width(const gs_texture_t *voltex)
EXPORT void gs_effect_set_default(gs_eparam_t *param)
EXPORT uint32_t gs_voltexture_get_depth(const gs_texture_t *voltex)
EXPORT void gs_load_indexbuffer(gs_indexbuffer_t *indexbuffer)
Definition: graphics.h:98
EXPORT void gs_texture_destroy(gs_texture_t *tex)
struct vec3 * normals
Definition: graphics.h:187
Definition: graphics.h:122
Definition: graphics.h:102
Definition: graphics.h:106
Definition: graphics.h:232
enum gs_address_mode address_u
Definition: graphics.h:218
EXPORT void gs_set_2d_mode(void)
Definition: graphics.h:286
EXPORT void gs_vertex2f(float x, float y)
EXPORT gs_swapchain_t * gs_swapchain_create(const struct gs_init_data *data)
EXPORT void gs_effect_set_vec2(gs_eparam_t *param, const struct vec2 *val)
Definition: graphics.h:92
Definition: graphics.h:118
EXPORT void gs_clear(uint32_t clear_flags, const struct vec4 *color, float depth, uint8_t stencil)
uint32_t adapter
Definition: graphics.h:449
Definition: graphics.h:61
Definition: graphics.h:300
Definition: graphics.h:285
EXPORT void gs_color(uint32_t color)
uint32_t * colors
Definition: graphics.h:189
Definition: graphics.h:117
EXPORT void gs_effect_get_param_info(const gs_eparam_t *param, struct gs_effect_param_info *info)
enum gs_shader_param_type type
Definition: graphics.h:345
Definition: graphics.h:289
Definition: effect.h:49
EXPORT void gs_blend_state_pop(void)
EXPORT gs_shader_t * gs_get_vertex_shader(void)
EXPORT void gs_technique_end(gs_technique_t *technique)
EXPORT void gs_cubetexture_set_image(gs_texture_t *cubetex, uint32_t side, const void *data, uint32_t linesize, bool invert)
EXPORT gs_eparam_t * gs_effect_get_viewproj_matrix(const gs_effect_t *effect)
EXPORT void gs_depth_function(enum gs_depth_test test)
EXPORT void gs_texcoord2v(const struct vec2 *v, int unit)
EXPORT void gs_destroy(graphics_t *graphics)
EXPORT uint8_t * gs_create_texture_file_data(const char *file, enum gs_color_format *format, uint32_t *cx, uint32_t *cy)
EXPORT gs_technique_t * gs_effect_get_current_technique(const gs_effect_t *effect)
gs_cube_sides
Definition: graphics.h:136
EXPORT gs_texture_t * gs_texture_create_from_file(const char *file)
Definition: graphics.h:93
gs_zstencil_format
Definition: graphics.h:77
EXPORT void gs_shader_set_matrix4(gs_sparam_t *param, const struct matrix4 *val)
EXPORT graphics_t * gs_get_context(void)
gs_blend_type
Definition: graphics.h:96
Definition: graphics.h:53
EXPORT void gs_effect_update_params(gs_effect_t *effect)
EXPORT gs_zstencil_t * gs_get_zstencil_target(void)
gs_address_mode
Definition: graphics.h:157
EXPORT void gs_stage_texture(gs_stagesurf_t *dst, gs_texture_t *src)
EXPORT void gs_texrender_destroy(gs_texrender_t *texrender)
EXPORT gs_vertbuffer_t * gs_render_save(void)
Definition: graphics.h:62
Definition: graphics.h:179
Definition: graphics.h:97
Definition: graphics.h:101
Definition: graphics.h:184
Definition: effect.h:115
EXPORT void gs_load_pixelshader(gs_shader_t *pixelshader)
Definition: graphics.h:124
Definition: graphics.h:78
EXPORT int gs_create(graphics_t **graphics, const char *module, uint32_t adapter)
EXPORT void gs_get_size(uint32_t *x, uint32_t *y)
Definition: graphics.h:49
Definition: graphics.h:151
EXPORT void gs_draw_cube_backdrop(gs_texture_t *cubetex, const struct quat *rot, float left, float right, float top, float bottom, float znear)
EXPORT void gs_enable_stencil_write(bool enable)
Definition: graphics.h:166
Definition: graphics.h:82
Definition: plane.h:30
Definition: graphics.h:147
EXPORT void gs_load_texture(gs_texture_t *tex, int unit)
Definition: graphics.h:107
EXPORT void gs_matrix_identity(void)
EXPORT void bfree(void *ptr)
EXPORT uint32_t gs_voltexture_get_height(const gs_texture_t *voltex)
EXPORT void gs_effect_set_val(gs_eparam_t *param, const void *val, size_t size)
Definition: graphics.h:57
size_t num
Definition: graphics.h:185
Definition: graphics.h:68
enum gs_shader_param_type type
Definition: graphics.h:295
EXPORT void gs_load_vertexshader(gs_shader_t *vertshader)
EXPORT gs_indexbuffer_t * gs_indexbuffer_create(enum gs_index_type type, void *indices, size_t num, uint32_t flags)
EXPORT void gs_matrix_set(const struct matrix4 *matrix)
Definition: graphics.h:81
Definition: graphics.h:132
Definition: graphics.h:162
EXPORT gs_stagesurf_t * gs_stagesurface_create(uint32_t width, uint32_t height, enum gs_color_format color_format)
gs_depth_test
Definition: graphics.h:110
Definition: graphics.h:69
EXPORT void gs_matrix_scale(const struct vec3 *scale)
Definition: graphics.h:115
EXPORT void gs_vertex3f(float x, float y, float z)
EXPORT gs_technique_t * gs_effect_get_technique(const gs_effect_t *effect, const char *name)
Definition: graphics.h:64
EXPORT void gs_texrender_reset(gs_texrender_t *texrender)
EXPORT gs_effect_t * gs_effect_create(const char *effect_string, const char *filename, char **error_string)
struct gs_texture_render gs_texrender_t
Definition: graphics.h:265
EXPORT void gs_enum_adapters(bool(*callback)(void *param, const char *name, uint32_t id), void *param)
EXPORT void gs_shader_set_int(gs_sparam_t *param, int val)
Definition: graphics.h:59
EXPORT void gs_vertexbuffer_destroy(gs_vertbuffer_t *vertbuffer)
EXPORT void gs_load_vertexbuffer(gs_vertbuffer_t *vertbuffer)
EXPORT void gs_enable_blending(bool enable)
Definition: graphics.h:100
EXPORT void gs_reset_blend_state(void)
uint32_t cy
Definition: graphics.h:445
EXPORT void gs_matrix_rotaa(const struct axisang *rot)
EXPORT void gs_effect_set_bool(gs_eparam_t *param, bool val)
Definition: graphics.h:154
struct gs_swap_chain gs_swapchain_t
Definition: graphics.h:264
Definition: graphics.h:168
EXPORT void gs_draw_sprite(gs_texture_t *tex, uint32_t flip, uint32_t width, uint32_t height)
EXPORT void gs_render_stop(enum gs_draw_mode mode)
Definition: graphics.h:133
long cx
Definition: graphics.h:175
EXPORT gs_eparam_t * gs_effect_get_world_matrix(const gs_effect_t *effect)
EXPORT void gs_matrix_translate(const struct vec3 *pos)
long cy
Definition: graphics.h:176
Definition: graphics.h:137
Definition: graphics.h:343
EXPORT void gs_perspective(float fovy, float aspect, float znear, float zfar)