diff --git a/en/advanced_topics/shaders.md b/en/advanced_topics/shaders.md index 3d4efad..cfccb78 100644 --- a/en/advanced_topics/shaders.md +++ b/en/advanced_topics/shaders.md @@ -26,38 +26,39 @@ for 3d objects, and so on. Users can change the predefined shaders from any Cocos2d-x `Node` by calling: ```cpp -sprite->setGLProgramState(programState); -sprite3d->setGLProgramState(programState); +sprite->setProgramState(programState); +sprite3d->setProgramState(programState); ``` -The `GLProgramState` object contains two important things: +The `ProgramState` object contains two important things: -- A `GLProgram`: Basically this is _the_ shader. It contains a vertex and fragment shader. +- A `Program`: Basically this is _the_ shader. It contains a vertex and fragment shader. - And the __state__, which basically are the uniforms of the shader. In case you are not familiar with the term _uniform_ and why it is needed, please refer to the [OpenGL Shading Language Specification](https://www.khronos.org/files/opengles_shading_language.pdf) -Setting uniforms to a `GLProgramState` is as easy as this: +Setting uniforms to a `ProgramState` is as easy as this: ```cpp -glProgramState->setUniformFloat("u_progress", 0.9); -glProgramState->setUniformVec2("u_position", Vec2(x,y)); -glProgramState->setUniformMat4("u_transform", matrix); +auto mvpMatrixLocation = _programState->getUniformLocation("u_MVPMatrix"); +const auto& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION); +_programState->setUniform(mvpMatrixLocation, projectionMat.m, sizeof(projectionMat.m))); ``` You can even set callbacks as a uniform value: ```cpp -glProgramState->setUniformCallback("u_progress", [](GLProgram* glProgram, Uniform* uniform) +auto location = _programState->getUniformLocation("u_progress"); +_programState->setCallbackUniform(location, [](backend::ProgramState *programState, backend::UniformLocation uniform) { float random = CCRANDOM_0_1(); - glProgram->setUniformLocationWith1f(uniform->location, random); + programState->setUniform(uniform, &random, sizeof(random)); } ); ``` -And although it is possible to set `GLProgramState` objects manually, an easier +And although it is possible to set `ProgramState` objects manually, an easier way to do it is by using `Material` objects. ### What is a Material @@ -644,33 +645,10 @@ __Types__: