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 
294 #ifndef SWIG
297  const char *name;
298 };
299 
303 };
304 
305 EXPORT void gs_shader_destroy(gs_shader_t *shader);
306 
307 EXPORT int gs_shader_get_num_params(const gs_shader_t *shader);
309  uint32_t param);
311  const char *name);
312 
315 
317  struct gs_shader_param_info *info);
318 EXPORT void gs_shader_set_bool(gs_sparam_t *param, bool val);
319 EXPORT void gs_shader_set_float(gs_sparam_t *param, float val);
320 EXPORT void gs_shader_set_int(gs_sparam_t *param, int val);
321 EXPORT void gs_shader_set_matrix3(gs_sparam_t *param, const struct matrix3 *val);
322 EXPORT void gs_shader_set_matrix4(gs_sparam_t *param, const struct matrix4 *val);
323 EXPORT void gs_shader_set_vec2(gs_sparam_t *param, const struct vec2 *val);
324 EXPORT void gs_shader_set_vec3(gs_sparam_t *param, const struct vec3 *val);
325 EXPORT void gs_shader_set_vec4(gs_sparam_t *param, const struct vec4 *val);
327 EXPORT void gs_shader_set_val(gs_sparam_t *param, const void *val, size_t size);
330  gs_samplerstate_t *sampler);
331 #endif
332 
333 /* ---------------------------------------------------
334  * effect functions
335  * --------------------------------------------------- */
336 
337 /*enum gs_effect_property_type {
338  GS_EFFECT_NONE,
339  GS_EFFECT_BOOL,
340  GS_EFFECT_FLOAT,
341  GS_EFFECT_COLOR,
342  GS_EFFECT_TEXTURE
343 };*/
344 
345 #ifndef SWIG
347  const char *name;
349 
350  /* const char *full_name;
351  enum gs_effect_property_type prop_type;
352 
353  float min, max, inc, mul; */
354 };
355 #endif
356 
357 EXPORT void gs_effect_destroy(gs_effect_t *effect);
358 
360  const char *name);
361 
363  const gs_effect_t *effect);
364 
365 EXPORT size_t gs_technique_begin(gs_technique_t *technique);
366 EXPORT void gs_technique_end(gs_technique_t *technique);
367 EXPORT bool gs_technique_begin_pass(gs_technique_t *technique, size_t pass);
369  const char *name);
371 
372 EXPORT size_t gs_effect_get_num_params(const gs_effect_t *effect);
374  size_t param);
376  const char *name);
377 
381 EXPORT bool gs_effect_loop(gs_effect_t *effect, const char *name);
382 
385 
388 
389 #ifndef SWIG
391  struct gs_effect_param_info *info);
392 #endif
393 
394 EXPORT void gs_effect_set_bool(gs_eparam_t *param, bool val);
395 EXPORT void gs_effect_set_float(gs_eparam_t *param, float val);
396 EXPORT void gs_effect_set_int(gs_eparam_t *param, int val);
398  const struct matrix4 *val);
399 EXPORT void gs_effect_set_vec2(gs_eparam_t *param, const struct vec2 *val);
400 EXPORT void gs_effect_set_vec3(gs_eparam_t *param, const struct vec3 *val);
401 EXPORT void gs_effect_set_vec4(gs_eparam_t *param, const struct vec4 *val);
403 EXPORT void gs_effect_set_val(gs_eparam_t *param, const void *val, size_t size);
406  gs_samplerstate_t *sampler);
407 
409 
410 /* ---------------------------------------------------
411  * texture render helper functions
412  * --------------------------------------------------- */
413 
415  enum gs_zstencil_format zsformat);
418  uint32_t cy);
419 EXPORT void gs_texrender_end(gs_texrender_t *texrender);
420 EXPORT void gs_texrender_reset(gs_texrender_t *texrender);
422 
423 /* ---------------------------------------------------
424  * graphics subsystem
425  * --------------------------------------------------- */
426 
427 #define GS_BUILD_MIPMAPS (1<<0)
428 #define GS_DYNAMIC (1<<1)
429 #define GS_RENDER_TARGET (1<<2)
430 #define GS_GL_DUMMYTEX (1<<3)
431 #define GS_DUP_BUFFER (1<<4)
434 /* ---------------- */
435 /* global functions */
436 
437 #define GS_SUCCESS 0
438 #define GS_ERROR_FAIL -1
439 #define GS_ERROR_MODULE_NOT_FOUND -2
440 #define GS_ERROR_NOT_SUPPORTED -3
442 struct gs_window {
443 #if defined(_WIN32)
444  void *hwnd;
445 #elif defined(__APPLE__)
446  __unsafe_unretained id view;
447 #elif defined(__linux__) || defined(__FreeBSD__)
448  /* I'm not sure how portable defining id to uint32_t is. */
449  uint32_t id;
450  void* display;
451 #endif
452 };
453 
454 struct gs_init_data {
461 };
462 
463 #define GS_DEVICE_OPENGL 1
464 #define GS_DEVICE_DIRECT3D_11 2
466 EXPORT const char *gs_get_device_name(void);
467 EXPORT int gs_get_device_type(void);
469  bool (*callback)(void *param, const char *name, uint32_t id),
470  void *param);
471 
472 EXPORT int gs_create(graphics_t **graphics, const char *module,
473  uint32_t adapter);
474 EXPORT void gs_destroy(graphics_t *graphics);
475 
476 EXPORT void gs_enter_context(graphics_t *graphics);
477 EXPORT void gs_leave_context(void);
479 
480 EXPORT void gs_matrix_push(void);
481 EXPORT void gs_matrix_pop(void);
482 EXPORT void gs_matrix_identity(void);
483 EXPORT void gs_matrix_transpose(void);
484 EXPORT void gs_matrix_set(const struct matrix4 *matrix);
485 EXPORT void gs_matrix_get(struct matrix4 *dst);
486 EXPORT void gs_matrix_mul(const struct matrix4 *matrix);
487 EXPORT void gs_matrix_rotquat(const struct quat *rot);
488 EXPORT void gs_matrix_rotaa(const struct axisang *rot);
489 EXPORT void gs_matrix_translate(const struct vec3 *pos);
490 EXPORT void gs_matrix_scale(const struct vec3 *scale);
491 EXPORT void gs_matrix_rotaa4f(float x, float y, float z, float angle);
492 EXPORT void gs_matrix_translate3f(float x, float y, float z);
493 EXPORT void gs_matrix_scale3f(float x, float y, float z);
494 
495 EXPORT void gs_render_start(bool b_new);
496 EXPORT void gs_render_stop(enum gs_draw_mode mode);
498 EXPORT void gs_vertex2f(float x, float y);
499 EXPORT void gs_vertex3f(float x, float y, float z);
500 EXPORT void gs_normal3f(float x, float y, float z);
501 EXPORT void gs_color(uint32_t color);
502 EXPORT void gs_texcoord(float x, float y, int unit);
503 EXPORT void gs_vertex2v(const struct vec2 *v);
504 EXPORT void gs_vertex3v(const struct vec3 *v);
505 EXPORT void gs_normal3v(const struct vec3 *v);
506 EXPORT void gs_color4v(const struct vec4 *v);
507 EXPORT void gs_texcoord2v(const struct vec2 *v, int unit);
508 
511 
513  char **error_string);
514 EXPORT gs_effect_t *gs_effect_create(const char *effect_string,
515  const char *filename, char **error_string);
516 
518  char **error_string);
520  char **error_string);
521 
523 EXPORT uint8_t *gs_create_texture_file_data(const char *file,
524  enum gs_color_format *format, uint32_t *cx, uint32_t *cy);
525 
526 #define GS_FLIP_U (1<<0)
527 #define GS_FLIP_V (1<<1)
536 EXPORT void gs_draw_sprite(gs_texture_t *tex, uint32_t flip, uint32_t width,
537  uint32_t height);
538 
540  uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
541 
542 EXPORT void gs_draw_cube_backdrop(gs_texture_t *cubetex, const struct quat *rot,
543  float left, float right, float top, float bottom, float znear);
544 
546 EXPORT void gs_reset_viewport(void);
547 
549 EXPORT void gs_set_2d_mode(void);
551 EXPORT void gs_set_3d_mode(double fovy, double znear, double zvar);
552 
553 EXPORT void gs_viewport_push(void);
554 EXPORT void gs_viewport_pop(void);
555 
556 EXPORT void gs_texture_set_image(gs_texture_t *tex, const uint8_t *data,
557  uint32_t linesize, bool invert);
559  const void *data, uint32_t linesize, bool invert);
560 
561 EXPORT void gs_perspective(float fovy, float aspect, float znear, float zfar);
562 
563 EXPORT void gs_blend_state_push(void);
564 EXPORT void gs_blend_state_pop(void);
565 EXPORT void gs_reset_blend_state(void);
566 
567 /* -------------------------- */
568 /* library-specific functions */
569 
571 
572 EXPORT void gs_resize(uint32_t x, uint32_t y);
573 EXPORT void gs_get_size(uint32_t *x, uint32_t *y);
576 
578  enum gs_color_format color_format, uint32_t levels,
579  const uint8_t **data, uint32_t flags);
581  enum gs_color_format color_format, uint32_t levels,
582  const uint8_t **data, uint32_t flags);
584  uint32_t depth, enum gs_color_format color_format,
585  uint32_t levels, const uint8_t **data, uint32_t flags);
586 
588  enum gs_zstencil_format format);
589 
591  enum gs_color_format color_format);
592 
594  const struct gs_sampler_info *info);
595 
596 EXPORT gs_shader_t *gs_vertexshader_create(const char *shader,
597  const char *file, char **error_string);
598 EXPORT gs_shader_t *gs_pixelshader_create(const char *shader,
599  const char *file, char **error_string);
600 
602  uint32_t flags);
604  void *indices, size_t num, uint32_t flags);
605 
607 
609 EXPORT void gs_load_indexbuffer(gs_indexbuffer_t *indexbuffer);
610 EXPORT void gs_load_texture(gs_texture_t *tex, int unit);
611 EXPORT void gs_load_samplerstate(gs_samplerstate_t *samplerstate, int unit);
612 EXPORT void gs_load_vertexshader(gs_shader_t *vertshader);
613 EXPORT void gs_load_pixelshader(gs_shader_t *pixelshader);
614 
615 EXPORT void gs_load_default_samplerstate(bool b_3d, int unit);
616 
619 
622 
624 EXPORT void gs_set_cube_render_target(gs_texture_t *cubetex, int side,
625  gs_zstencil_t *zstencil);
626 
629  gs_texture_t *dst, uint32_t dst_x, uint32_t dst_y,
630  gs_texture_t *src, uint32_t src_x, uint32_t src_y,
631  uint32_t src_w, uint32_t src_h);
633 
634 EXPORT void gs_begin_scene(void);
635 EXPORT void gs_draw(enum gs_draw_mode draw_mode, uint32_t start_vert,
636  uint32_t num_verts);
637 EXPORT void gs_end_scene(void);
638 
639 #define GS_CLEAR_COLOR (1<<0)
640 #define GS_CLEAR_DEPTH (1<<1)
641 #define GS_CLEAR_STENCIL (1<<2)
643 EXPORT void gs_load_swapchain(gs_swapchain_t *swapchain);
644 EXPORT void gs_clear(uint32_t clear_flags, const struct vec4 *color,
645  float depth, uint8_t stencil);
646 EXPORT void gs_present(void);
647 EXPORT void gs_flush(void);
648 
649 EXPORT void gs_set_cull_mode(enum gs_cull_mode mode);
651 
652 EXPORT void gs_enable_blending(bool enable);
653 EXPORT void gs_enable_depth_test(bool enable);
654 EXPORT void gs_enable_stencil_test(bool enable);
655 EXPORT void gs_enable_stencil_write(bool enable);
656 EXPORT void gs_enable_color(bool red, bool green, bool blue, bool alpha);
657 
658 EXPORT void gs_blend_function(enum gs_blend_type src, enum gs_blend_type dest);
660  enum gs_blend_type src_c, enum gs_blend_type dest_c,
661  enum gs_blend_type src_a, enum gs_blend_type dest_a);
662 EXPORT void gs_depth_function(enum gs_depth_test test);
663 
665  enum gs_depth_test test);
666 EXPORT void gs_stencil_op(enum gs_stencil_side side,
667  enum gs_stencil_op_type fail,
668  enum gs_stencil_op_type zfail,
669  enum gs_stencil_op_type zpass);
670 
671 EXPORT void gs_set_viewport(int x, int y, int width, int height);
672 EXPORT void gs_get_viewport(struct gs_rect *rect);
673 EXPORT void gs_set_scissor_rect(const struct gs_rect *rect);
674 
675 EXPORT void gs_ortho(float left, float right, float top, float bottom,
676  float znear, float zfar);
677 EXPORT void gs_frustum(float left, float right, float top, float bottom,
678  float znear, float zfar);
679 
680 EXPORT void gs_projection_push(void);
681 EXPORT void gs_projection_pop(void);
682 
684 
689  const gs_texture_t *tex);
690 EXPORT bool gs_texture_map(gs_texture_t *tex, uint8_t **ptr,
691  uint32_t *linesize);
696 EXPORT bool gs_texture_is_rect(const gs_texture_t *tex);
702 
706  const gs_texture_t *cubetex);
707 
713  const gs_texture_t *voltex);
714 
719  const gs_stagesurf_t *stagesurf);
720 EXPORT bool gs_stagesurface_map(gs_stagesurf_t *stagesurf, uint8_t **data,
721  uint32_t *linesize);
723 
725 
727 
731  const struct gs_vb_data *data);
733  const gs_vertbuffer_t *vertbuffer);
734 
736 EXPORT void gs_indexbuffer_flush(gs_indexbuffer_t *indexbuffer);
738  const void *data);
739 EXPORT void *gs_indexbuffer_get_data(const gs_indexbuffer_t *indexbuffer);
741  const gs_indexbuffer_t *indexbuffer);
743  const gs_indexbuffer_t *indexbuffer);
744 
745 #ifdef __APPLE__
746 
749 EXPORT gs_texture_t *gs_texture_create_from_iosurface(void *iosurf);
750 EXPORT bool gs_texture_rebind_iosurface(gs_texture_t *texture,
751  void *iosurf);
752 
753 #elif _WIN32
754 
755 EXPORT bool gs_gdi_texture_available(void);
756 EXPORT bool gs_shared_texture_available(void);
757 
758 struct gs_duplicator;
759 typedef struct gs_duplicator gs_duplicator_t;
760 
765 EXPORT bool gs_get_duplicator_monitor_info(int monitor_idx,
766  struct gs_monitor_info *monitor_info);
767 
769 EXPORT gs_duplicator_t *gs_duplicator_create(int monitor_idx);
770 EXPORT void gs_duplicator_destroy(gs_duplicator_t *duplicator);
771 
772 EXPORT bool gs_duplicator_update_frame(gs_duplicator_t *duplicator);
773 EXPORT gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator);
774 
776 EXPORT gs_texture_t *gs_texture_create_gdi(uint32_t width, uint32_t height);
777 
778 EXPORT void *gs_texture_get_dc(gs_texture_t *gdi_tex);
779 EXPORT void gs_texture_release_dc(gs_texture_t *gdi_tex);
780 
782 EXPORT gs_texture_t *gs_texture_open_shared(uint32_t handle);
783 #endif
784 
785 /* inline functions used by modules */
786 
787 static inline uint32_t gs_get_format_bpp(enum gs_color_format format)
788 {
789  switch (format) {
790  case GS_A8: return 8;
791  case GS_R8: return 8;
792  case GS_RGBA: return 32;
793  case GS_BGRX: return 32;
794  case GS_BGRA: return 32;
795  case GS_R10G10B10A2: return 32;
796  case GS_RGBA16: return 64;
797  case GS_R16: return 16;
798  case GS_RGBA16F: return 64;
799  case GS_RGBA32F: return 128;
800  case GS_RG16F: return 32;
801  case GS_RG32F: return 64;
802  case GS_R16F: return 16;
803  case GS_R32F: return 32;
804  case GS_DXT1: return 4;
805  case GS_DXT3: return 8;
806  case GS_DXT5: return 8;
807  case GS_UNKNOWN: return 0;
808  }
809 
810  return 0;
811 }
812 
813 static inline bool gs_is_compressed_format(enum gs_color_format format)
814 {
815  return (format == GS_DXT1 || format == GS_DXT3 || format == GS_DXT5);
816 }
817 
818 static inline uint32_t gs_get_total_levels(uint32_t width, uint32_t height)
819 {
820  uint32_t size = width > height ? width : height;
821  uint32_t num_levels = 0;
822 
823  while (size > 1) {
824  size /= 2;
825  num_levels++;
826  }
827 
828  return num_levels;
829 }
830 
831 #ifdef __cplusplus
832 }
833 #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:457
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:459
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:297
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:456
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:455
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:443
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:347
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:302
enum gs_zstencil_format zsformat
Definition: graphics.h:460
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_indexbuffer_flush_direct(gs_indexbuffer_t *indexbuffer, const void *data)
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:275
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
EXPORT void gs_vertexbuffer_flush_direct(gs_vertbuffer_t *vertbuffer, const struct gs_vb_data *data)
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:458
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:300
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:295
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:461
Definition: graphics.h:61
Definition: graphics.h:301
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:348
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
EXPORT void gs_effect_set_color(gs_eparam_t *param, uint32_t argb)
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:296
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:457
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:346
EXPORT void gs_perspective(float fovy, float aspect, float znear, float zfar)