␉␉␉for (int i = 0; i < effectPtr->param_count; i += 1)␊ |
␉␉␉{␊ |
␉␉␉␉MojoShader.MOJOSHADER_effectParam param = paramPtr[i];␊ |
␉␉␉␉if (␉param.value.value_type == MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_VERTEXSHADER ||␊ |
␉␉␉␉␉param.value.value_type == MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_PIXELSHADER␉)␊ |
␉␉␉␉if (␉param.value.type.parameter_type == MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_VERTEXSHADER ||␊ |
␉␉␉␉␉param.value.type.parameter_type == MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_PIXELSHADER␉)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉// Skip shader objects...␊ |
␉␉␉␉␉continue;␊ |
␉␉␉␉}␊ |
␉␉␉␉else if (␉param.value.value_type >= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_SAMPLER &&␊ |
␉␉␉␉␉␉param.value.value_type <= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_SAMPLERCUBE␉)␊ |
␉␉␉␉else if (␉param.value.type.parameter_type >= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_SAMPLER &&␊ |
␉␉␉␉␉␉param.value.type.parameter_type <= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_SAMPLERCUBE␉)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉string textureName = String.Empty;␊ |
␉␉␉␉␉MojoShader.MOJOSHADER_effectSamplerState* states = (MojoShader.MOJOSHADER_effectSamplerState*) param.value.values;␊ |
␉␉␉␉␉for (int j = 0; j < param.value.value_count; j += 1)␊ |
␉␉␉␉␉{␊ |
␉␉␉␉␉␉if (␉states[j].value.value_type >= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_TEXTURE &&␊ |
␉␉␉␉␉␉␉states[j].value.value_type <= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_TEXTURECUBE␉)␊ |
␉␉␉␉␉␉if (␉states[j].value.type.parameter_type >= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_TEXTURE &&␊ |
␉␉␉␉␉␉␉states[j].value.type.parameter_type <= MojoShader.MOJOSHADER_symbolType.MOJOSHADER_SYMTYPE_TEXTURECUBE␉)␊ |
␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉MojoShader.MOJOSHADER_effectObject *objectPtr = (MojoShader.MOJOSHADER_effectObject*) effectPtr->objects;␊ |
␉␉␉␉␉␉␉int* index = (int*) states[j].value.values;␊ |
|
␉␉␉␉␉}␊ |
␉␉␉␉␉continue;␊ |
␉␉␉␉}␊ |
␊ |
␉␉␉␉EffectParameterCollection structMembers = null;␊ |
␉␉␉␉if (param.value.type.member_count > 0)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉List<EffectParameter> memList = new List<EffectParameter>();␊ |
␉␉␉␉␉unsafe␊ |
␉␉␉␉␉{␊ |
␉␉␉␉␉␉MojoShader.MOJOSHADER_symbolStructMember* mem;␊ |
␉␉␉␉␉␉IntPtr curOffset = IntPtr.Zero;␊ |
␉␉␉␉␉␉for (int j = 0; j < param.value.type.member_count; j += 1)␊ |
␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉mem = (MojoShader.MOJOSHADER_symbolStructMember*) param.value.type.members;␊ |
␉␉␉␉␉␉␉memList.Add(new EffectParameter(␊ |
␉␉␉␉␉␉␉␉Marshal.PtrToStringAnsi(mem->name),␊ |
␉␉␉␉␉␉␉␉null,␊ |
␉␉␉␉␉␉␉␉(int) mem->info.rows,␊ |
␉␉␉␉␉␉␉␉(int) mem->info.columns,␊ |
␉␉␉␉␉␉␉␉(int) mem->info.elements,␊ |
␉␉␉␉␉␉␉␉XNAClass[(int) param.value.type.parameter_class],␊ |
␉␉␉␉␉␉␉␉XNAType[(int) param.value.type.parameter_type],␊ |
␉␉␉␉␉␉␉␉null, // FIXME: Nested structs! -flibit␊ |
␉␉␉␉␉␉␉␉null,␊ |
␉␉␉␉␉␉␉␉curOffset␊ |
␉␉␉␉␉␉␉));␊ |
␉␉␉␉␉␉␉uint memSize = mem->info.rows + mem->info.columns;␊ |
␉␉␉␉␉␉␉if (mem->info.elements > 0)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉memSize *= mem->info.elements;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉curOffset += (int) memSize * 4;␊ |
␉␉␉␉␉␉}␊ |
␉␉␉␉␉}␊ |
␉␉␉␉␉structMembers = new EffectParameterCollection(memList);␊ |
␉␉␉␉}␊ |
␊ |
␉␉␉␉parameters.Add(new EffectParameter(␊ |
␉␉␉␉␉Marshal.PtrToStringAnsi(param.value.name),␊ |
␉␉␉␉␉Marshal.PtrToStringAnsi(param.value.semantic),␊ |
␉␉␉␉␉(int) param.value.row_count,␊ |
␉␉␉␉␉(int) param.value.column_count,␊ |
␉␉␉␉␉(int) param.value.element_count,␊ |
␉␉␉␉␉XNAClass[(int) param.value.value_class],␊ |
␉␉␉␉␉XNAType[(int) param.value.value_type],␊ |
␉␉␉␉␉null, // FIXME: See mojoshader_effects.c:readvalue -flibit␊ |
␉␉␉␉␉(int) param.value.type.rows,␊ |
␉␉␉␉␉(int) param.value.type.columns,␊ |
␉␉␉␉␉(int) param.value.type.elements,␊ |
␉␉␉␉␉XNAClass[(int) param.value.type.parameter_class],␊ |
␉␉␉␉␉XNAType[(int) param.value.type.parameter_type],␊ |
␉␉␉␉␉structMembers,␊ |
␉␉␉␉␉INTERNAL_readAnnotations(␊ |
␉␉␉␉␉␉param.annotations,␊ |
␉␉␉␉␉␉param.annotation_count␊ |