Class ShaderProgram

java.lang.Object
org.boxutil.base.BaseShaderData
org.boxutil.units.standard.ShaderProgram

public class ShaderProgram extends BaseShaderData
For example how use it:
 
 // program init
 final String vertSrc, fragSrc;
 final var program = new ShaderProgram("YourShaderProgramTag-TheCommonDraw", vertSrc, fragSrc);
 if (program.isValid()) {
     // location setup
     // If have uniform
     program.initUniformSize(2)
             .beginUniform()
             .loadUniformIndex("u_u00")
             .loadUniformIndex("u_u01")

             // if have UBO
             .initUniformBlockSize(1)
             .beginUniformBlock()
             .loadAndSetUniformBlockIndex("BUtilGlobalData", ShaderCore.getMatrixUBOBinding())

             // if have subroutine
             .initSubroutineSize(5, 2)
             .beginSubroutine(0, GL20.GL_VERTEX_SHADER)
             .loadSubroutineIndex("p_funA_v00") // of "f_funA_vu"
             .loadSubroutineIndex("p_funA_v01") // of "f_funA_vu"
             .loadSubroutineIndex("p_funA_v02") // of "f_funA_vu"
             .loadSubroutineIndex("p_funB_v00") // of "f_funB_vu"
             .loadSubroutineIndex("p_funB_v01") // of "f_funB_vu"
             .beginSubroutine(1, GL20.GL_FRAGMENT_SHADER)
             .loadSubroutineIndex("p_fun_f00")
             .loadSubroutineIndex("p_fun_f01")

             .initSubroutineUniformSize(2, 1)
             .beginSubroutineUniform(0, GL20.GL_VERTEX_SHADER)
             .loadSubroutineUniformIndex("f_funA_vu") // index 0
             .loadSubroutineUniformIndex("f_funB_vu") // index 1
             .beginSubroutineUniform(1, GL20.GL_FRAGMENT_SHADER)
             .loadSubroutineUniformIndex("f_fun_fu")
             .computeSubroutineUniformRoute();
 }



 // When running
 // set uniform
 GL20.glUniform1i(program.uniform("u_u00"), 2); // put 2 to "u_u00" that use GL13.GL_TEXTURE2, if "u_u00" is a 'sampler2D' type uniform
 //GL20.glUniform1i(program.location[0], 2); // or use index
 final int texID;
 program.bindTexture2D(2, texID); // bind to "u_u00"

 GL20.glUniform2f(program.uniform("u_u01"), 1.0f, 0.0f); // put vec2(1.0f, 0.0f) to "u_u01", if "u_u01" is a 'vec2' type uniform
 //GL20.glUniform2f(program.location[1], 1.0f, 0.0f); // or use index


 // put "p_funA_v00" to "f_funA_vu" and put "p_funB_v00" to "f_funB_vu"
 final int[] vertexSub = new int[2];
 vertexSub[0] = program.subroutine(0, "p_funA_v00"); // "f_funA_vu" at index-0
 //vertexSub[0] = program.subroutineLocation[0][0]; // or use index
 vertexSub[1] = program.subroutine(0, "p_funB_v00"); // "f_funB_vu" at index-1
 //vertexSub[1] = program.subroutineLocation[0][3]; // or use index
 program.putUniformSubroutines(GL20.GL_VERTEX_SHADER, 0, vertexSub);


 // put "p_fun_f00" to "f_fun_fu"
 program.putUniformSubroutine(GL20.GL_VERTEX_SHADER, 1, 0);
 
 
  • Field Details

    • uniformMap

      protected org.boxutil.backends.util.BUtil_BoundedStr2IntMap uniformMap
    • uniformBlockMap

      protected org.boxutil.backends.util.BUtil_BoundedStr2IntMap uniformBlockMap
    • subroutineMap

      protected org.boxutil.backends.util.BUtil_BoundedStr2IntMap[] subroutineMap
    • subroutineUniformMap

      protected org.boxutil.backends.util.BUtil_BoundedStr2IntMap[] subroutineUniformMap
    • _tmpIndex

      protected final int[] _tmpIndex
  • Constructor Details

    • ShaderProgram

      public ShaderProgram(int id)
    • ShaderProgram

      public ShaderProgram(boolean fromPath, @Nullable String loggerTag, String vert, String frag)
    • ShaderProgram

      public ShaderProgram(@Nullable String loggerTag, String vert, String frag)
    • ShaderProgram

      public ShaderProgram(boolean fromPath, @Nullable String loggerTag, String vert, String geom, String frag)
    • ShaderProgram

      public ShaderProgram(@Nullable String loggerTag, String vert, String geom, String frag)
    • ShaderProgram

      public ShaderProgram(boolean fromPath, @Nullable String loggerTag, String vert, String tessC, String tessE, String frag)
    • ShaderProgram

      public ShaderProgram(@Nullable String loggerTag, String vert, String tessC, String tessE, String frag)
    • ShaderProgram

      public ShaderProgram(boolean fromPath, @Nullable String loggerTag, String vert, String tessC, String tessE, String geom, String frag)
    • ShaderProgram

      public ShaderProgram(@Nullable String loggerTag, String vert, String tessC, String tessE, String geom, String frag)
    • ShaderProgram

      public ShaderProgram(boolean fromPath, @Nullable String loggerTag, String... source)
    • ShaderProgram

      public ShaderProgram(@Nullable String loggerTag, String... source)
  • Method Details

    • initUniformSize

      public ShaderProgram initUniformSize(int size)
    • beginUniform

      public ShaderProgram beginUniform()
    • loadUniformIndex

      public ShaderProgram loadUniformIndex(@NotNull String name)
    • loadUniformIndex

      public ShaderProgram loadUniformIndex(int storeIndex, @NotNull String name)
    • uniform

      public int uniform(String name)
      Quickly queries the cached uniform location value after it has been set up via loadUniformIndex.
      Returns:
      -1 when does not contain this name.
    • initUniformBlockSize

      public ShaderProgram initUniformBlockSize(int size)
    • beginUniformBlock

      public ShaderProgram beginUniformBlock()
    • loadUniformBlockIndex

      public ShaderProgram loadUniformBlockIndex(@NotNull String name)
    • loadUniformBlockIndex

      public ShaderProgram loadUniformBlockIndex(int storeIndex, @NotNull String name)
    • loadAndSetUniformBlockIndex

      public ShaderProgram loadAndSetUniformBlockIndex(@NotNull String name, int bindingIndex)
    • loadAndSetUniformBlockIndex

      public ShaderProgram loadAndSetUniformBlockIndex(int storeIndex, @NotNull String name, int bindingIndex)
    • uniform_block

      public int uniform_block(String name)
      Quickly queries the cached uniform block location value after it has been set up via loadUniformBlockIndex or loadAndSetUniformBlockIndex.
      Returns:
      -1 when does not contain this name.
    • initSubroutineSize

      public ShaderProgram initSubroutineSize(int... categorySize)
    • beginSubroutine

      public ShaderProgram beginSubroutine(int storeCategory, int shaderType)
    • loadSubroutineIndex

      public ShaderProgram loadSubroutineIndex(@NotNull String name)
    • loadSubroutineIndex

      public ShaderProgram loadSubroutineIndex(int storeCategory, int storeIndex, int shaderType, @NotNull String name)
    • subroutine

      public int subroutine(int category, String name)
      Quickly queries the cached subroutine function location value after it has been set up via loadSubroutineIndex.
      Returns:
      -1 when does not contain this name.
    • initSubroutineUniformSize

      public ShaderProgram initSubroutineUniformSize(int... categorySize)
    • beginSubroutineUniform

      public ShaderProgram beginSubroutineUniform(int storeCategory, int shaderType)
    • loadSubroutineUniformIndex

      public ShaderProgram loadSubroutineUniformIndex(@NotNull String name)
    • loadSubroutineUniformIndex

      public ShaderProgram loadSubroutineUniformIndex(int storeCategory, int storeIndex, int shaderType, @NotNull String name)
    • subroutine_uniform

      public int subroutine_uniform(int category, String name)
      Quickly queries the cached subroutine uniform location value after it has been set up via loadSubroutineUniformIndex.
      Returns:
      -1 when does not contain this name.
    • computeSubroutineUniformRoute

      public ShaderProgram computeSubroutineUniformRoute()