Open Broadcaster Software
Free, open source software for live streaming and recording
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 
217  enum gs_sample_filter filter;
218  enum gs_address_mode address_u;
219  enum gs_address_mode address_v;
220  enum gs_address_mode address_w;
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 {
444  struct gs_window window;
447  enum gs_color_format format;
448  enum gs_zstencil_format zsformat;
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 
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 
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
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)
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)
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)
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)
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
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
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
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)
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
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)