| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 | 
							- Effects (Shaders)
 
- =================
 
- Effects are a single collection of related shaders.  They're used for
 
- easily writing vertex and pixel shaders together all in the same file in
 
- HLSL format.
 
- .. code:: cpp
 
-    #include <graphics/graphics.h>
 
- .. type:: struct gs_effect           gs_effect_t
 
-    Effect object.
 
- .. type:: struct gs_effect_technique gs_technique_t
 
-    Technique object.
 
- .. type:: struct gs_effect_param     gs_eparam_t
 
-    Effect parameter object.
 
- ---------------------
 
- .. function:: gs_effect_t *gs_effect_create_from_file(const char *file, char **error_string)
 
-    Creates an effect from file.
 
-    :param file:         Path to the effect file
 
-    :param error_string: Receives a pointer to the error string, which
 
-                         must be freed with :c:func:`bfree()`.  If
 
-                         *NULL*, this parameter is ignored.
 
-    :return:             The effect object, or *NULL* on error
 
- ---------------------
 
- .. function:: gs_effect_t *gs_effect_create(const char *effect_string, const char *filename, char **error_string)
 
-    Creates an effect from a string.
 
-    :param effect_String: Effect string
 
-    :param error_string:  Receives a pointer to the error string, which
 
-                          must be freed with :c:func:`bfree()`.  If
 
-                          *NULL*, this parameter is ignored.
 
-    :return:              The effect object, or *NULL* on error
 
- ---------------------
 
- .. function:: void gs_effect_destroy(gs_effect_t *effect)
 
-    Destroys the effect
 
-    :param effect: Effect object
 
- ---------------------
 
- .. function:: gs_technique_t *gs_effect_get_technique(const gs_effect_t *effect, const char *name)
 
-    Gets a technique of the effect.
 
-    :param effect: Effect object
 
-    :param name:   Name of the technique
 
-    :return:       Technique object, or *NULL* if not found
 
- ---------------------
 
- .. function:: gs_technique_t *gs_effect_get_current_technique(const gs_effect_t *effect)
 
-    Gets the current active technique of the effect.
 
-    :param effect: Effect object
 
-    :return:       Technique object, or *NULL* if none currently active
 
- ---------------------
 
- .. function:: size_t gs_technique_begin(gs_technique_t *technique)
 
-    Begins a technique.
 
-    :param technique: Technique object
 
-    :return:          Number of passes this technique uses
 
- ---------------------
 
- .. function:: void gs_technique_end(gs_technique_t *technique)
 
-    Ends a technique.  Make sure all active passes have been ended before
 
-    calling.
 
-    :param technique: Technique object
 
- ---------------------
 
- .. function:: bool gs_technique_begin_pass(gs_technique_t *technique, size_t pass)
 
-    Begins a pass.  Automatically loads the vertex/pixel shaders
 
-    associated with this pass.  Draw after calling this function.
 
-    :param technique: Technique object
 
-    :param pass:      Pass index
 
-    :return:          *true* if the pass is valid, *false* otherwise
 
- ---------------------
 
- .. function:: bool gs_technique_begin_pass_by_name(gs_technique_t *technique, const char *name)
 
-    Begins a pass by its name if the pass has a name.  Automatically
 
-    loads the vertex/pixel shaders associated with this pass.  Draw after
 
-    calling this function.
 
-    :param technique: Technique object
 
-    :param name:      Name of the pass
 
-    :return:          *true* if the pass is valid, *false* otherwise
 
- ---------------------
 
- .. function:: void gs_technique_end_pass(gs_technique_t *technique)
 
-    Ends a pass.
 
-    :param technique: Technique object
 
- ---------------------
 
- .. function:: size_t gs_effect_get_num_params(const gs_effect_t *effect)
 
-    Gets the number of parameters associated with the effect.
 
-    :param effect: Effect object
 
-    :return:       Number of parameters the effect has
 
- ---------------------
 
- .. function:: gs_eparam_t *gs_effect_get_param_by_idx(const gs_effect_t *effect, size_t param)
 
-    Gets a parameter of an effect by its index.
 
-    :param effect: Effect object
 
-    :param param:  Parameter index
 
-    :return:       The effect parameter object, or *NULL* if index
 
-                   invalid
 
- ---------------------
 
- .. function:: gs_eparam_t *gs_effect_get_param_by_name(const gs_effect_t *effect, const char *name)
 
-    Gets parameter of an effect by its name.
 
-    :param effect: Effect object
 
-    :param name:   Name of the parameter
 
-    :return:       The effect parameter object, or *NULL* if not found
 
- ---------------------
 
- .. function:: size_t gs_param_get_num_annotations(const gs_eparam_t *param)
 
-    Gets the number of annotations associated with the parameter.
 
-    :param param:  Param object
 
-    :return:       Number of annotations the param has
 
- ---------------------
 
- .. function:: gs_eparam_t *gs_param_get_annotation_by_idx(const gs_eparam_t *param, size_t annotation)
 
-    Gets an annotation of a param by its index.
 
-    :param param:  Param object
 
-    :param param:  Annotation index
 
-    :return:       The effect parameter object (annotation), or *NULL* if index
 
-                   invalid
 
- ---------------------
 
- .. function:: gs_eparam_t *gs_param_get_annotation_by_name(const gs_eparam_t *param, const char *annotation)
 
-    Gets parameter of an effect by its name.
 
-    :param param:  Param object
 
-    :param name:   Name of the annotation
 
-    :return:       The effect parameter object (annotation), or *NULL* if not found
 
- ---------------------
 
- .. function:: bool gs_effect_loop(gs_effect_t *effect, const char *name)
 
-    Helper function that automatically begins techniques/passes.
 
-    :param effect: Effect object
 
-    :param name:   Name of the technique to execute
 
-    :return:       *true* to draw, *false* when complete
 
-    Here is an example of how this function is typically used:
 
- .. code:: cpp
 
-    for (gs_effect_loop(effect, "my_technique")) {
 
-            /* perform drawing here */
 
-            [...]
 
-    }
 
- ---------------------
 
- .. function:: gs_eparam_t *gs_effect_get_viewproj_matrix(const gs_effect_t *effect)
 
-    Gets the view/projection matrix parameter ("viewproj") of the effect.
 
-    :param effect: Effect object
 
-    :return:       The view/projection matrix parameter of the effect
 
- ---------------------
 
- .. function:: gs_eparam_t *gs_effect_get_world_matrix(const gs_effect_t *effect)
 
-    Gets the world matrix parameter ("world") of the effect.
 
-    :param effect: Effect object
 
-    :return:       The world matrix parameter of the effect
 
- ---------------------
 
- .. function:: void gs_effect_get_param_info(const gs_eparam_t *param, struct gs_effect_param_info *info)
 
-    Gets information about an effect parameter.
 
-    :param param: Effect parameter
 
-    :param info:  Pointer to receive the data
 
-    Relevant data types used with this function:
 
- .. code:: cpp
 
-    enum gs_shader_param_type {
 
-            GS_SHADER_PARAM_UNKNOWN,
 
-            GS_SHADER_PARAM_BOOL,
 
-            GS_SHADER_PARAM_FLOAT,
 
-            GS_SHADER_PARAM_INT,
 
-            GS_SHADER_PARAM_STRING,
 
-            GS_SHADER_PARAM_VEC2,
 
-            GS_SHADER_PARAM_VEC3,
 
-            GS_SHADER_PARAM_VEC4,
 
-            GS_SHADER_PARAM_INT2,
 
-            GS_SHADER_PARAM_INT3,
 
-            GS_SHADER_PARAM_INT4,
 
-            GS_SHADER_PARAM_MATRIX4X4,
 
-            GS_SHADER_PARAM_TEXTURE,
 
-    };
 
-    struct gs_effect_param_info {
 
-            const char *name;
 
-            enum gs_shader_param_type type;
 
-    }
 
- ---------------------
 
- .. function:: void gs_effect_set_bool(gs_eparam_t *param, bool val)
 
-    Sets a boolean parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Boolean value
 
- ---------------------
 
- .. function:: void gs_effect_set_float(gs_eparam_t *param, float val)
 
-    Sets a floating point parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Floating point value
 
- ---------------------
 
- .. function:: void gs_effect_set_int(gs_eparam_t *param, int val)
 
-    Sets a integer parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Integer value
 
- ---------------------
 
- .. function:: void gs_effect_set_matrix4(gs_eparam_t *param, const struct matrix4 *val)
 
-    Sets a matrix parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Matrix
 
- ---------------------
 
- .. function:: void gs_effect_set_vec2(gs_eparam_t *param, const struct vec2 *val)
 
-    Sets a 2-component vector parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Vector
 
- ---------------------
 
- .. function:: void gs_effect_set_vec3(gs_eparam_t *param, const struct vec3 *val)
 
-    Sets a 3-component vector parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Vector
 
- ---------------------
 
- .. function:: void gs_effect_set_vec4(gs_eparam_t *param, const struct vec4 *val)
 
-    Sets a 4-component vector parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Vector
 
- ---------------------
 
- .. function:: void gs_effect_set_color(gs_eparam_t *param, uint32_t argb)
 
-    Convenience function for setting a color value via an integer value.
 
-    :param param: Effect parameter
 
-    :param argb:  Integer color value (i.e. hex value would be
 
-                  0xAARRGGBB)
 
- ---------------------
 
- .. function:: void gs_effect_set_texture(gs_eparam_t *param, gs_texture_t *val)
 
-    Sets a texture parameter.
 
-    :param param: Effect parameter
 
-    :param val:   Texture
 
- ---------------------
 
- .. function:: void gs_effect_set_texture_srgb(gs_eparam_t *param, gs_texture_t *val)
 
-    Sets a texture parameter using SRGB view if available.
 
-    :param param: Effect parameter
 
-    :param val:   Texture
 
- ---------------------
 
- .. function:: void gs_effect_set_val(gs_eparam_t *param, const void *val, size_t size)
 
-    Sets a parameter with data manually.
 
-    :param param: Effect parameter
 
-    :param val:   Pointer to data
 
-    :param size:  Size of data
 
- ---------------------
 
- .. function:: void gs_effect_set_default(gs_eparam_t *param)
 
-    Sets the parameter to its default value
 
-    :param: Effect parameter
 
- ---------------------
 
- .. function:: void gs_effect_set_next_sampler(gs_eparam_t *param, gs_samplerstate_t *sampler)
 
-    Manually changes the sampler for an effect parameter the next time
 
-    it's used.
 
-    :param param:   Effect parameter
 
-    :param sampler: Sampler state object
 
- ---------------------
 
- .. function:: void *gs_effect_get_val(gs_eparam_t *param)
 
-    Returns a copy of the param's current value.
 
-    :param param:   Effect parameter
 
-    :return:        A pointer to the copied byte value of the param's current value. Freed with :c:func:`bfree()`.
 
- ---------------------
 
- .. function:: void gs_effect_get_default_val(gs_eparam_t *param)
 
-    Returns a copy of the param's default value.
 
-    :param param:   Effect parameter
 
-    :return:        A pointer to the copied byte value of the param's default value. Freed with :c:func:`bfree()`.
 
- ---------------------
 
- .. function:: size_t gs_effect_get_val_size(gs_eparam_t *param)
 
-    Returns the size in bytes of the param's current value.
 
-    :param param:   Effect parameter
 
-    :return:        The size in bytes of the param's current value.
 
- ---------------------
 
- .. function:: size_t gs_effect_get_default_val_size(gs_eparam_t *param)
 
-    Returns the size in bytes of the param's default value.
 
-    :param param:   Effect parameter
 
-    :return:        The size in bytes of the param's default value.
 
 
  |