diff --git a/Kha/Backends/Kinc-HL/kinc-bridge/shader.c.h b/Kha/Backends/Kinc-HL/kinc-bridge/shader.c.h index d661b08..6b89ea3 100644 --- a/Kha/Backends/Kinc-HL/kinc-bridge/shader.c.h +++ b/Kha/Backends/Kinc-HL/kinc-bridge/shader.c.h @@ -1,265 +1,265 @@ -#include -#include -#include -#include - -#include - -static kinc_g4_compare_mode_t convertCompareMode(int mode) { - switch (mode) { - case 0: - return KINC_G4_COMPARE_ALWAYS; - case 1: - return KINC_G4_COMPARE_NEVER; - case 2: - return KINC_G4_COMPARE_EQUAL; - case 3: - return KINC_G4_COMPARE_NOT_EQUAL; - case 4: - return KINC_G4_COMPARE_LESS; - case 5: - return KINC_G4_COMPARE_LESS_EQUAL; - case 6: - return KINC_G4_COMPARE_GREATER; - case 7: - default: - return KINC_G4_COMPARE_GREATER_EQUAL; - } -} - -static kinc_g4_stencil_action_t convertStencilAction(int action) { - switch (action) { - case 0: - return KINC_G4_STENCIL_KEEP; - case 1: - return KINC_G4_STENCIL_ZERO; - case 2: - return KINC_G4_STENCIL_REPLACE; - case 3: - return KINC_G4_STENCIL_INCREMENT; - case 4: - return KINC_G4_STENCIL_INCREMENT_WRAP; - case 5: - return KINC_G4_STENCIL_DECREMENT; - case 6: - return KINC_G4_STENCIL_DECREMENT_WRAP; - case 7: - default: - return KINC_G4_STENCIL_INVERT; - } -} - -static kinc_g4_render_target_format_t convertColorAttachment(int format) { - switch (format) { - case 0: - return KINC_G4_RENDER_TARGET_FORMAT_32BIT; - case 1: - return KINC_G4_RENDER_TARGET_FORMAT_8BIT_RED; - case 2: - return KINC_G4_RENDER_TARGET_FORMAT_128BIT_FLOAT; - case 3: - return KINC_G4_RENDER_TARGET_FORMAT_16BIT_DEPTH; - case 4: - return KINC_G4_RENDER_TARGET_FORMAT_64BIT_FLOAT; - case 5: - return KINC_G4_RENDER_TARGET_FORMAT_32BIT_RED_FLOAT; - case 6: - default: - return KINC_G4_RENDER_TARGET_FORMAT_16BIT_RED_FLOAT; - } -} - -vbyte *hl_kinc_create_vertexshader(vbyte *data, int length) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_VERTEX); - return (vbyte *)shader; -} - -vbyte *hl_kinc_create_fragmentshader(vbyte *data, int length) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_FRAGMENT); - return (vbyte *)shader; -} - -vbyte *hl_kinc_create_geometryshader(vbyte *data, int length) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_GEOMETRY); - return (vbyte *)shader; -} - -vbyte *hl_kinc_create_tesscontrolshader(vbyte *data, int length) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_TESSELLATION_CONTROL); - return (vbyte *)shader; -} - -vbyte *hl_kinc_create_tessevalshader(vbyte *data, int length) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_TESSELLATION_EVALUATION); - return (vbyte *)shader; -} - -vbyte *hl_kinc_vertexshader_from_source(vbyte *source) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_VERTEX); - return (vbyte *)shader; -} - -vbyte *hl_kinc_fragmentshader_from_source(vbyte *source) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_FRAGMENT); - return (vbyte *)shader; -} - -vbyte *hl_kinc_geometryshader_from_source(vbyte *source) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_GEOMETRY); - return (vbyte *)shader; -} - -vbyte *hl_kinc_tesscontrolshader_from_source(vbyte *source) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_TESSELLATION_CONTROL); - return (vbyte *)shader; -} - -vbyte *hl_kinc_tessevalshader_from_source(vbyte *source) { - kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); - kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_TESSELLATION_EVALUATION); - return (vbyte *)shader; -} - -vbyte *hl_kinc_create_pipeline() { - kinc_g4_pipeline_t *pipeline = (kinc_g4_pipeline_t *)malloc(sizeof(kinc_g4_pipeline_t)); - kinc_g4_pipeline_init(pipeline); - return (vbyte *)pipeline; -} - -void hl_kinc_delete_pipeline(vbyte *pipeline) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_pipeline_destroy(pipe); - free(pipe); -} - -void hl_kinc_pipeline_set_vertex_shader(vbyte *pipeline, vbyte *shader) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; - pipe->vertex_shader = sh; -} - -void hl_kinc_pipeline_set_fragment_shader(vbyte *pipeline, vbyte *shader) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; - pipe->fragment_shader = sh; -} - -void hl_kinc_pipeline_set_geometry_shader(vbyte *pipeline, vbyte *shader) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; - pipe->geometry_shader = sh; -} - -void hl_kinc_pipeline_set_tesscontrol_shader(vbyte *pipeline, vbyte *shader) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; - pipe->tessellation_control_shader = sh; -} - -void hl_kinc_pipeline_set_tesseval_shader(vbyte *pipeline, vbyte *shader) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; - pipe->tessellation_evaluation_shader = sh; -} - -void hl_kinc_pipeline_compile(vbyte *pipeline, vbyte *structure0, vbyte *structure1, vbyte *structure2, vbyte *structure3) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - pipe->input_layout[0] = (kinc_g4_vertex_structure_t *)structure0; - pipe->input_layout[1] = (kinc_g4_vertex_structure_t *)structure1; - pipe->input_layout[2] = (kinc_g4_vertex_structure_t *)structure2; - pipe->input_layout[3] = (kinc_g4_vertex_structure_t *)structure3; - pipe->input_layout[4] = NULL; - kinc_g4_pipeline_compile(pipe); -} - -void hl_kinc_pipeline_set_states(vbyte *pipeline, int cullMode, int depthMode, int stencilFrontMode, int stencilFrontBothPass, int stencilFrontDepthFail, - int stencilFrontFail, int stencilBackMode, int stencilBackBothPass, int stencilBackDepthFail, int stencilBackFail, - int blendSource, int blendDestination, int alphaBlendSource, int alphaBlendDestination, bool depthWrite, - int stencilReferenceValue, int stencilReadMask, int stencilWriteMask, bool colorWriteMaskRed, bool colorWriteMaskGreen, - bool colorWriteMaskBlue, bool colorWriteMaskAlpha, int colorAttachmentCount, int colorAttachment0, int colorAttachment1, - int colorAttachment2, int colorAttachment3, int colorAttachment4, int colorAttachment5, int colorAttachment6, - int colorAttachment7, int depthAttachmentBits, int stencilAttachmentBits, bool conservativeRasterization) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - - switch (cullMode) { - case 0: - pipe->cull_mode = KINC_G4_CULL_CLOCKWISE; - break; - case 1: - pipe->cull_mode = KINC_G4_CULL_COUNTER_CLOCKWISE; - break; - case 2: - pipe->cull_mode = KINC_G4_CULL_NOTHING; - break; - } - - pipe->depth_mode = convertCompareMode(depthMode); - pipe->depth_write = depthWrite; - - pipe->stencil_front_mode = convertCompareMode(stencilFrontMode); - pipe->stencil_front_both_pass = convertStencilAction(stencilFrontBothPass); - pipe->stencil_front_depth_fail = convertStencilAction(stencilFrontDepthFail); - pipe->stencil_front_fail = convertStencilAction(stencilFrontFail); - - pipe->stencil_back_mode = convertCompareMode(stencilBackMode); - pipe->stencil_back_both_pass = convertStencilAction(stencilBackBothPass); - pipe->stencil_back_depth_fail = convertStencilAction(stencilBackDepthFail); - pipe->stencil_back_fail = convertStencilAction(stencilBackFail); - - pipe->stencil_reference_value = stencilReferenceValue; - pipe->stencil_read_mask = stencilReadMask; - pipe->stencil_write_mask = stencilWriteMask; - - pipe->blend_source = (kinc_g4_blending_factor_t)blendSource; - pipe->blend_destination = (kinc_g4_blending_factor_t)blendDestination; - pipe->alpha_blend_source = (kinc_g4_blending_factor_t)alphaBlendSource; - pipe->alpha_blend_destination = (kinc_g4_blending_factor_t)alphaBlendDestination; - - pipe->color_write_mask_red[0] = colorWriteMaskRed; - pipe->color_write_mask_green[0] = colorWriteMaskGreen; - pipe->color_write_mask_blue[0] = colorWriteMaskBlue; - pipe->color_write_mask_alpha[0] = colorWriteMaskAlpha; - - pipe->color_attachment_count = colorAttachmentCount; - pipe->color_attachment[0] = convertColorAttachment(colorAttachment0); - pipe->color_attachment[1] = convertColorAttachment(colorAttachment1); - pipe->color_attachment[2] = convertColorAttachment(colorAttachment2); - pipe->color_attachment[3] = convertColorAttachment(colorAttachment3); - pipe->color_attachment[4] = convertColorAttachment(colorAttachment4); - pipe->color_attachment[5] = convertColorAttachment(colorAttachment5); - pipe->color_attachment[6] = convertColorAttachment(colorAttachment6); - pipe->color_attachment[7] = convertColorAttachment(colorAttachment7); - - pipe->depth_attachment_bits = depthAttachmentBits; - pipe->stencil_attachment_bits = stencilAttachmentBits; - - pipe->conservative_rasterization = conservativeRasterization; -} - -void hl_kinc_pipeline_set(vbyte *pipeline) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_set_pipeline(pipe); -} - -vbyte *hl_kinc_pipeline_get_constantlocation(vbyte *pipeline, vbyte *name) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_constant_location_t *location = (kinc_g4_constant_location_t *)malloc(sizeof(kinc_g4_constant_location_t)); - *location = kinc_g4_pipeline_get_constant_location(pipe, (char *)name); - return (vbyte *)location; -} - -vbyte *hl_kinc_pipeline_get_textureunit(vbyte *pipeline, vbyte *name) { - kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; - kinc_g4_texture_unit_t *unit = (kinc_g4_texture_unit_t *)malloc(sizeof(kinc_g4_texture_unit_t)); - *unit = kinc_g4_pipeline_get_texture_unit(pipe, (char *)name); - return (vbyte *)unit; -} +#include +#include +#include +#include + +#include + +static kinc_g4_compare_mode_t convertCompareMode(int mode) { + switch (mode) { + case 0: + return KINC_G4_COMPARE_ALWAYS; + case 1: + return KINC_G4_COMPARE_NEVER; + case 2: + return KINC_G4_COMPARE_EQUAL; + case 3: + return KINC_G4_COMPARE_NOT_EQUAL; + case 4: + return KINC_G4_COMPARE_LESS; + case 5: + return KINC_G4_COMPARE_LESS_EQUAL; + case 6: + return KINC_G4_COMPARE_GREATER; + case 7: + default: + return KINC_G4_COMPARE_GREATER_EQUAL; + } +} + +static kinc_g4_stencil_action_t convertStencilAction(int action) { + switch (action) { + case 0: + return KINC_G4_STENCIL_KEEP; + case 1: + return KINC_G4_STENCIL_ZERO; + case 2: + return KINC_G4_STENCIL_REPLACE; + case 3: + return KINC_G4_STENCIL_INCREMENT; + case 4: + return KINC_G4_STENCIL_INCREMENT_WRAP; + case 5: + return KINC_G4_STENCIL_DECREMENT; + case 6: + return KINC_G4_STENCIL_DECREMENT_WRAP; + case 7: + default: + return KINC_G4_STENCIL_INVERT; + } +} + +static kinc_g4_render_target_format_t convertColorAttachment(int format) { + switch (format) { + case 0: + return KINC_G4_RENDER_TARGET_FORMAT_32BIT; + case 1: + return KINC_G4_RENDER_TARGET_FORMAT_8BIT_RED; + case 2: + return KINC_G4_RENDER_TARGET_FORMAT_128BIT_FLOAT; + case 3: + return KINC_G4_RENDER_TARGET_FORMAT_16BIT_DEPTH; + case 4: + return KINC_G4_RENDER_TARGET_FORMAT_64BIT_FLOAT; + case 5: + return KINC_G4_RENDER_TARGET_FORMAT_32BIT_RED_FLOAT; + case 6: + default: + return KINC_G4_RENDER_TARGET_FORMAT_16BIT_RED_FLOAT; + } +} + +vbyte *hl_kinc_create_vertexshader(vbyte *data, int length) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_VERTEX); + return (vbyte *)shader; +} + +vbyte *hl_kinc_create_fragmentshader(vbyte *data, int length) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_FRAGMENT); + return (vbyte *)shader; +} + +vbyte *hl_kinc_create_geometryshader(vbyte *data, int length) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_GEOMETRY); + return (vbyte *)shader; +} + +vbyte *hl_kinc_create_tesscontrolshader(vbyte *data, int length) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_TESSELLATION_CONTROL); + return (vbyte *)shader; +} + +vbyte *hl_kinc_create_tessevalshader(vbyte *data, int length) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init(shader, data, length, KINC_G4_SHADER_TYPE_TESSELLATION_EVALUATION); + return (vbyte *)shader; +} + +vbyte *hl_kinc_vertexshader_from_source(vbyte *source) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_VERTEX); + return (vbyte *)shader; +} + +vbyte *hl_kinc_fragmentshader_from_source(vbyte *source) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_FRAGMENT); + return (vbyte *)shader; +} + +vbyte *hl_kinc_geometryshader_from_source(vbyte *source) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_GEOMETRY); + return (vbyte *)shader; +} + +vbyte *hl_kinc_tesscontrolshader_from_source(vbyte *source) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_TESSELLATION_CONTROL); + return (vbyte *)shader; +} + +vbyte *hl_kinc_tessevalshader_from_source(vbyte *source) { + kinc_g4_shader_t *shader = (kinc_g4_shader_t *)malloc(sizeof(kinc_g4_shader_t)); + kinc_g4_shader_init_from_source(shader, (char *)source, KINC_G4_SHADER_TYPE_TESSELLATION_EVALUATION); + return (vbyte *)shader; +} + +vbyte *hl_kinc_create_pipeline() { + kinc_g4_pipeline_t *pipeline = (kinc_g4_pipeline_t *)malloc(sizeof(kinc_g4_pipeline_t)); + kinc_g4_pipeline_init(pipeline); + return (vbyte *)pipeline; +} + +void hl_kinc_delete_pipeline(vbyte *pipeline) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_pipeline_destroy(pipe); + free(pipe); +} + +void hl_kinc_pipeline_set_vertex_shader(vbyte *pipeline, vbyte *shader) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; + pipe->vertex_shader = sh; +} + +void hl_kinc_pipeline_set_fragment_shader(vbyte *pipeline, vbyte *shader) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; + pipe->fragment_shader = sh; +} + +void hl_kinc_pipeline_set_geometry_shader(vbyte *pipeline, vbyte *shader) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; + pipe->geometry_shader = sh; +} + +void hl_kinc_pipeline_set_tesscontrol_shader(vbyte *pipeline, vbyte *shader) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; + pipe->tessellation_control_shader = sh; +} + +void hl_kinc_pipeline_set_tesseval_shader(vbyte *pipeline, vbyte *shader) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_shader_t *sh = (kinc_g4_shader_t *)shader; + pipe->tessellation_evaluation_shader = sh; +} + +void hl_kinc_pipeline_compile(vbyte *pipeline, vbyte *structure0, vbyte *structure1, vbyte *structure2, vbyte *structure3) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + pipe->input_layout[0] = (kinc_g4_vertex_structure_t *)structure0; + pipe->input_layout[1] = (kinc_g4_vertex_structure_t *)structure1; + pipe->input_layout[2] = (kinc_g4_vertex_structure_t *)structure2; + pipe->input_layout[3] = (kinc_g4_vertex_structure_t *)structure3; + pipe->input_layout[4] = NULL; + kinc_g4_pipeline_compile(pipe); +} + +void hl_kinc_pipeline_set_states(vbyte *pipeline, int cullMode, int depthMode, int stencilFrontMode, int stencilFrontBothPass, int stencilFrontDepthFail, + int stencilFrontFail, int stencilBackMode, int stencilBackBothPass, int stencilBackDepthFail, int stencilBackFail, + int blendSource, int blendDestination, int alphaBlendSource, int alphaBlendDestination, bool depthWrite, + int stencilReferenceValue, int stencilReadMask, int stencilWriteMask, bool colorWriteMaskRed, bool colorWriteMaskGreen, + bool colorWriteMaskBlue, bool colorWriteMaskAlpha, int colorAttachmentCount, int colorAttachment0, int colorAttachment1, + int colorAttachment2, int colorAttachment3, int colorAttachment4, int colorAttachment5, int colorAttachment6, + int colorAttachment7, int depthAttachmentBits, int stencilAttachmentBits, bool conservativeRasterization) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + + switch (cullMode) { + case 0: + pipe->cull_mode = KINC_G4_CULL_CLOCKWISE; + break; + case 1: + pipe->cull_mode = KINC_G4_CULL_COUNTER_CLOCKWISE; + break; + case 2: + pipe->cull_mode = KINC_G4_CULL_NOTHING; + break; + } + + pipe->depth_mode = convertCompareMode(depthMode); + pipe->depth_write = depthWrite; + + pipe->stencil_front_mode = convertCompareMode(stencilFrontMode); + pipe->stencil_front_both_pass = convertStencilAction(stencilFrontBothPass); + pipe->stencil_front_depth_fail = convertStencilAction(stencilFrontDepthFail); + pipe->stencil_front_fail = convertStencilAction(stencilFrontFail); + + pipe->stencil_back_mode = convertCompareMode(stencilBackMode); + pipe->stencil_back_both_pass = convertStencilAction(stencilBackBothPass); + pipe->stencil_back_depth_fail = convertStencilAction(stencilBackDepthFail); + pipe->stencil_back_fail = convertStencilAction(stencilBackFail); + + pipe->stencil_reference_value = stencilReferenceValue; + pipe->stencil_read_mask = stencilReadMask; + pipe->stencil_write_mask = stencilWriteMask; + + pipe->blend_source = (kinc_g4_blending_factor_t)blendSource; + pipe->blend_destination = (kinc_g4_blending_factor_t)blendDestination; + pipe->alpha_blend_source = (kinc_g4_blending_factor_t)alphaBlendSource; + pipe->alpha_blend_destination = (kinc_g4_blending_factor_t)alphaBlendDestination; + + pipe->color_write_mask_red[0] = colorWriteMaskRed; + pipe->color_write_mask_green[0] = colorWriteMaskGreen; + pipe->color_write_mask_blue[0] = colorWriteMaskBlue; + pipe->color_write_mask_alpha[0] = colorWriteMaskAlpha; + + pipe->color_attachment_count = colorAttachmentCount; + pipe->color_attachment[0] = convertColorAttachment(colorAttachment0); + pipe->color_attachment[1] = convertColorAttachment(colorAttachment1); + pipe->color_attachment[2] = convertColorAttachment(colorAttachment2); + pipe->color_attachment[3] = convertColorAttachment(colorAttachment3); + pipe->color_attachment[4] = convertColorAttachment(colorAttachment4); + pipe->color_attachment[5] = convertColorAttachment(colorAttachment5); + pipe->color_attachment[6] = convertColorAttachment(colorAttachment6); + pipe->color_attachment[7] = convertColorAttachment(colorAttachment7); + + pipe->depth_attachment_bits = depthAttachmentBits; + pipe->stencil_attachment_bits = stencilAttachmentBits; + + pipe->conservative_rasterization = conservativeRasterization; +} + +void hl_kinc_pipeline_set(vbyte *pipeline) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_set_pipeline(pipe); +} + +vbyte *hl_kinc_pipeline_get_constantlocation(vbyte *pipeline, vbyte *name) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_constant_location_t *location = (kinc_g4_constant_location_t *)malloc(sizeof(kinc_g4_constant_location_t)); + *location = kinc_g4_pipeline_get_constant_location(pipe, (char *)name); + return (vbyte *)location; +} + +vbyte *hl_kinc_pipeline_get_textureunit(vbyte *pipeline, vbyte *name) { + kinc_g4_pipeline_t *pipe = (kinc_g4_pipeline_t *)pipeline; + kinc_g4_texture_unit_t *unit = (kinc_g4_texture_unit_t *)malloc(sizeof(kinc_g4_texture_unit_t)); + *unit = kinc_g4_pipeline_get_texture_unit(pipe, (char *)name); + return (vbyte *)unit; +} \ No newline at end of file