cocos Uniforms值的赋值

cocos Uniforms值的赋值
举个void Renderer::drawBatchedTriangles()的渲染:
//Start drawing verties in batch
for(const auto& cmd : _batchedCommands)
{
auto newMaterialID = cmd->getMaterialID();
if(_lastMaterialID != newMaterialID || newMaterialID == MATERIAL_ID_DO_NOT_BATCH)
{
//Draw quads
if(indexToDraw > 0)
{
//使用前面绑定的定点数据,绘制图元
glDrawElements(GL_TRIANGLES, (GLsizei) indexToDraw, GL_UNSIGNED_SHORT, (GLvoid*) (startIndex*sizeof(_indices[0])) );
_drawnBatches++;
_drawnVertices += indexToDraw;

startIndex += indexToDraw;
indexToDraw = 0;
}

//Use new material
//这个函数内部就是对Uniforms赋值
cmd->useMaterial();
_lastMaterialID = newMaterialID;
}

indexToDraw += cmd->getIndexCount();
}

2、
void TrianglesCommand::useMaterial() const
{
//Set texture
//设置纹理
GL::bindTexture2D(_textureID);

//set blend mode
GL::blendFunc(_blendType.src, _blendType.dst);

_glProgramState->apply(_mv);
}

3、
void GLProgramState::apply(const Mat4& modelView)
{
//设置cocos内置的Uniforms值
applyGLProgram(modelView);

//一般用不到
applyAttributes();

//设置用户自定义的Uniforms值,当然也可以通过其他方式直接设置
applyUniforms();
}
4、
这个函数就是真正的设置Uniform的值
void GLProgram::setUniformsForBuiltins(const Mat4 &matrixMV)
{
auto& matrixP = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);

if (_flags.usesP)
setUniformLocationWithMatrix4fv(_builtInUniforms[UNIFORM_P_MATRIX], matrixP.m, 1);

if (_flags.usesMV)
setUniformLocationWithMatrix4fv(_builtInUniforms[UNIFORM_MV_MATRIX], matrixMV.m, 1);

if (_flags.usesMVP) {
Mat4 matrixMVP = matrixP * matrixMV;
setUniformLocationWithMatrix4fv(_builtInUniforms[UNIFORM_MVP_MATRIX], matrixMVP.m, 1);
}

if (_flags.usesNormal)
{
Mat4 mvInverse = matrixMV;
mvInverse.m[12] = mvInverse.m[13] = mvInverse.m[14] = 0.0f;
mvInverse.inverse();
mvInverse.transpose();
GLfloat normalMat[9];
normalMat[0] = mvInverse.m[0];normalMat[1] = mvInverse.m[1];normalMat[2] = mvInverse.m[2];
normalMat[3] = mvInverse.m[4];normalMat[4] = mvInverse.m[5];normalMat[5] = mvInverse.m[6];
normalMat[6] = mvInverse.m[8];normalMat[7] = mvInverse.m[9];normalMat[8] = mvInverse.m[10];
setUniformLocationWithMatrix3fv(_builtInUniforms[UNIFORM_NORMAL_MATRIX], normalMat, 1);
}

if (_flags.usesTime) {
// This doesn‘t give the most accurate global time value.
// Cocos2D doesn‘t store a high precision time value, so this will have to do.
// Getting Mach time per frame per shader using time could be extremely expensive.
float time = _director->getTotalFrames() * _director->getAnimationInterval();

setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_TIME], time/10.0, time, time*2, time*4);
setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_SIN_TIME], time/8.0, time/4.0, time/2.0, sinf(time));
setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_COS_TIME], time/8.0, time/4.0, time/2.0, cosf(time));
}

if (_flags.usesRandom)
setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_RANDOM01], CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1());
}
时间: 2024-12-11 20:17:00

cocos Uniforms值的赋值的相关文章

Lua学习 1) —— Android调用变量取值与赋值

2014-07-08 Lua脚本语言,嵌入在App中扩展开发是很不错的. 关于Android与Lua的环境搭配,我直接下载别人编好的.so与.jar(放到libs下就好了) 下面简单介绍一下Android调用Lua中的变量以及赋值 LuaState mLuaState; mLuaState = LuaStateFactory.newLuaState(); mLuaState.openLibs();//加载库 mLuaState.LdoString("x = 101");//执行一段lu

jquery对表单元素的取值和赋值

/*获得text的值*/ var textval =$("#text_id").attr("value"); //或者 var textval =$("#text_id").val(); /*获取单选按钮的值*/ var valraio =$("input[type=raio]:checked").val(); /*获取一组名为items的radio被选中项的值*/ var item =$('input[name=items]

浅谈jquery关于select框的取值和赋值

浅谈jquery关于select框的取值和赋值 jQuery("#select_id").change(function(){}); // 1.为Select添加事件,当选择其中一项时触发 var checkValue = jQuery("#select_id").val(); // 2.获取Select选中项的Value var checkText = jQuery("#select_id :selected").text(); // 3.获取

jquery关于select框的取值和赋值

jQuery("#select_id").change(function(){}); // 1.为Select添加事件,当选择其中一项时触发 var checkValue = jQuery("#select_id").val(); // 2.获取Select选中项的Value var checkText = jQuery("#select_id :selected").text(); // 3.获取Select选中项的Text var check

jQuery的函数取值与赋值

jQuery的函数,都有两个功能,取值与赋值    1.html()        若参数不为空,则先清空匹配元素的内容,然后调用append()插入内容.        若为空,则返回第一个匹配的元素的hmtl源码    2.extend() 用于扩展

jQuery对表单元素的取值和赋值操作代码

使用常规的思路:$(“#keyword”).value 取值是取不到的,因为此时$(‘#keydord’)已经不是个element,而是个jquery对象,所以应该使用:$(“#keyword”).val() $("#keyword")[0].value = ""; /*获得TEXT.AREATEXT的值*/ var textval = $("#text_id").attr("value"); //或者 var textval

【转】jQuery 取值、赋值的基本方法整理

这篇文章主要介绍了jQuery 取值.赋值的基本方法,需要的朋友可以参考下 /*获得TEXT.AREATEXT的值*/ var textval = $("#text_id").attr("value"); //或者 var textval = $("#text_id").val(); /*获取单选按钮的值*/ var valradio = $("input[@type=radio][@checked]").val(); /*获

VBS 读取文本文件特殊字符前如逗号的值并赋值给变量

我使用的仿真终端SecureCRT需要使用一个脚本,支持VBS的.我需要实现如下功能: 首先文本文件在:D:\100.txt文本文件的内容为:9 0,randy,9 1,jeff,9 2,sameul, 现在需要一个循环自动执行相关的参数,循环需要调用两个变量tn和name.要把文本文件的第一个逗号前的值赋值给tn,第二个逗号前的参数赋值给name.我没有学过VBS请尽量写的详细点. set fso=wscript.createobject("scripting.filesystemobject

ASP.NET MVC加载用户控件后并获取其内控件值或赋值

有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不想在控件制器内进行赋值,而是想在视图中使用jQuery来获取用户控件内的控件值或是为它们赋值.那需要怎样来做呢? 下面Insus.NET花上少少时间,做个简单的例子,演示与分享实现的方法. 实现之前,先修改一下AscxUtility.cs这个类中的 public static HtmlString Rende