コード例 #1
0
ファイル: Renderer.cpp プロジェクト: sixianhong/Hongshen
ShaderID Renderer::addShader(const char *fileName, const char *extraDefines){
	FILE *file = fopen(fileName, "rb");
	if (file == NULL){
		addToLog(String("Couldn't load \"") + fileName + "\"");
	} else {
		// Find file size
		fseek(file,  0, SEEK_END);
		int length = ftell(file);
		fseek(file,  0, SEEK_SET);

		char *shaderText = new char[length + 1];
		fread(shaderText, length, 1, file);
		fclose(file);
		shaderText[length] = '\0';

		char *vertexShader   = strstr(shaderText, "[Vertex shader]");
		char *fragmentShader = strstr(shaderText, "[Fragment shader]");

		if (vertexShader != NULL){
			*vertexShader = '\0';
			vertexShader += 15;
		}
		if (fragmentShader != NULL){
			*fragmentShader = '\0';
			fragmentShader += 17;
		}

		String vShaderString, fShaderString;
		if (vertexShader != NULL){
			int n = 0;
			char *str = shaderText;
			while (str < vertexShader){
				if (*str == '\n') n++;
				str++;
			}
			if (extraDefines) vShaderString = extraDefines;
			vShaderString.sprintf("#line %d\n", n);
			vShaderString += vertexShader;
		}
		if (fragmentShader != NULL){
			int n = 0;
			char *str = shaderText;
			while (str < fragmentShader){
				if (*str == '\n') n++;
				str++;
			}
			if (extraDefines) fShaderString = extraDefines;
			fShaderString.sprintf("#line %d\n", n);
			fShaderString += fragmentShader;
		}

		Shader shader;
		bool res = createShader(shader, vertexShader? (const char *) vShaderString : NULL, fragmentShader? (const char *) fShaderString : NULL);

		delete shaderText;

		if (res) return insertShader(shader);
	}
	return SHADER_NONE;
}
コード例 #2
0
ファイル: ShaderClass.cpp プロジェクト: Shada/Wanshift
ShaderClass::ShaderClass(std::string _vertexShader, std::string _geometryShader, std::string _hullShader,
						 std::string _domainShader, std::string _pixelShader, RenderInterface *_g, int _layoutType, bool _streamOutEnabled)
{
	graphics = _g;

	vertexShaderIndex = insertShader(_vertexShader, "vs_5_0", _layoutType);
	if(_streamOutEnabled == false)
	{
		geometryShaderIndex = insertShader(_geometryShader, "gs_5_0", -1);
	}
	else
	{
		geometryShaderIndex = graphics->createGeometryStreamOut(_geometryShader, "gs_5_0");
	}
	hullShaderIndex = insertShader(_hullShader, "hs_5_0", -1);
	domainShaderIndex = insertShader(_domainShader, "ds_5_0", -1);
	pixelShaderIndex = insertShader(_pixelShader, "ps_5_0", -1);
}
コード例 #3
0
ファイル: mainform.cpp プロジェクト: cheinkn/basextreme
void MainForm::insertGeometry(engine::IGeometry* geometry, HTREEITEM parentItem)
{
    HTREEITEM geometryItem = assetGraph.InsertItem(
        geometry->getName(),
        4, 4,
        parentItem,
        TVI_LAST
    );
    assert( geometryItem != NULL );
    assetGraph.SetItemData( geometryItem, (DWORD)( geometry ) );

    for( int i=0; i<geometry->getNumShaders(); i++ )
    {
        insertShader( geometry->getShader( i ), geometryItem );
    }
}