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.
|