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 
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 {
455  struct gs_window window;
457  uint32_t num_backbuffers;
458  enum gs_color_format format;
459  enum gs_zstencil_format zsformat;
460  uint32_t adapter;
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 
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 
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
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:297
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: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
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
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)
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
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)
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)
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
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)
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)