Example #1
0
// 表示の初期化
void initCube(struct engine* engine) {

 // 法線ベクトル有効化
  glEnable(GL_NORMALIZE);
  // デプステスト有効化
  glEnable(GL_DEPTH_TEST);
  // 面の破棄処理有効化
  glEnable(GL_CULL_FACE);
  // 背面を破棄する
  glCullFace(GL_BACK);
  // 陰影モード設定
  glShadeModel(GL_SMOOTH);
  // 利用するテクスチャは非圧縮とする
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

  // テクスチャ割当を生成
  glGenTextures(1, &texName[0]);  
  glBindTexture(GL_TEXTURE_2D, &texName[0]);

  // テクスチャ表示設定
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

  png_uint_32 width,height;  
  GLint type;
  GLubyte *textureImage;
  // PNG画像をOpenGL|ESのテクスチャとしてロードする(AssetManager経由)
  loadPngImage(engine->assetManager,  "texture.png", &width, &height, &type, &textureImage);
  // テクスチャーデータを割り当てる
  glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, type, GL_UNSIGNED_BYTE, textureImage);
}
Example #2
0
File: gui.c Project: JrCs/Chameleon
static int loadThemeImage(const char *image)
{
	char		dirspec[256];
	int		i;
	uint16_t	width;
	uint16_t	height;
	uint8_t		*imagedata;


	if ((strlen(image) + strlen(theme_name) + 20 ) > sizeof(dirspec)) {
		return 1;
	}
	for (i=0; i < sizeof(images) / sizeof(images[0]); i++) {
		if (strcmp(image, images[i].name) == 0) {
			if (images[i].image == NULL) {
				images[i].image = MALLOC(sizeof(pixmap_t));
			}
			sprintf(dirspec,"/Extra/Themes/%s/%s.png", theme_name, image);
			width = 0;
			height = 0;
			imagedata = NULL;
			if ((loadPngImage(dirspec, &width, &height, &imagedata)) != 0) {
				printf("ERROR: GUI: could not open '%s/%s.png'!\n", theme_name, image);
				sleep(5);
				return 1;
			}
			images[i].image->width = width;
			images[i].image->height = height;
			images[i].image->pixels = (pixel_t *)imagedata;
			flipRB(images[i].image);
			return 0;
		}
	}
	return 1;
}
void initTexture(int textureIndex, char fileName[])
{
    glBindTexture ( GL_TEXTURE_2D, texture_id[textureIndex] );
    //free (textureImage);
    int height, width;
    bool hasAlpha;
    bool success = loadPngImage(fileName, width, height, hasAlpha, &textureImage);
    if (!success) {
        std::cout << "Unable to load png file" << std::endl;
        return;
    }
    std::cout << "Image loaded " << width << " " << height << " alpha " << hasAlpha << std::endl;
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexImage2D(GL_TEXTURE_2D, 0, hasAlpha ? 4 : 3, width,
                 height, 0, hasAlpha ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE,
                 textureImage);
    //free (textureImage);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);



    free (textureImage);

}
Example #4
0
void init(void) {
	GLubyte *textureImage;

	glClearColor(0.0, 0.0, 0.0, 0.0);
	glEnable(GL_DEPTH_TEST);
	// The following two lines enable semi transparent
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	int width, height;
	bool hasAlpha;
	char filename[] = "logo.png";
	bool success = loadPngImage(filename, width, height, hasAlpha, &textureImage);
	if (!success) {
		std::cout << "Unable to load png file" << std::endl;
		return;
	}
	std::cout << "Image loaded " << width << " " << height << " alpha " << hasAlpha << std::endl;
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width,
		height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
		textureImage);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glEnable(GL_TEXTURE_2D);
	glShadeModel(GL_FLAT);
}
Example #5
0
	bool Image::Load(char* pathToFile)
	{
		m_width = -1;
		m_width = -1;
		m_hasAlpha = false;

		// further must be changed
		bool ret = loadPngImage(pathToFile, m_width, m_height, m_hasAlpha, m_buffer);

		return ret;
	}
Example #6
0
bool loadPngTexture(const char* filename, int& width, int& height, bool& alpha, unsigned char*& tex)
{
    if (loadPngImage(filename, width, height, alpha, tex))
    {
        return true;
    }
    else
    {
        width = 0;
        height = 0;
        alpha = false;
        tex = 0;
        return false;
    }
}
Example #7
0
bool CGLCG::LoadShader(const TCHAR *shaderFile)
{
	CCGShader cgShader;
	TCHAR shaderPath[MAX_PATH];
	TCHAR tempPath[MAX_PATH];
	CGprofile vertexProfile, fragmentProfile;
	GLenum error;

	if(!fboFunctionsLoaded) {
		MessageBox(NULL, TEXT("Your OpenGL graphics driver does not support framebuffer objects.\nYou will not be able to use CG shaders in OpenGL mode."), TEXT("CG Error"),
			MB_OK|MB_ICONEXCLAMATION);
        return false;
    }

	vertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX);
	fragmentProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT);

	cgGLDisableProfile(vertexProfile);
	cgGLDisableProfile(fragmentProfile);

	ClearPasses();

	if (shaderFile == NULL || *shaderFile==TEXT('\0'))
		return true;

	lstrcpy(shaderPath, shaderFile);
    ReduceToPath(shaderPath);

	SetCurrentDirectory(shaderPath);
	if(!cgShader.LoadShader(_tToChar(shaderFile)))
		return false;

	cgGLSetOptimalOptions(vertexProfile);
	cgGLSetOptimalOptions(fragmentProfile);

	/* insert dummy pass that will contain the original texture
	*/
	shaderPasses.push_back(shaderPass());

	for(CCGShader::passVector::iterator it=cgShader.shaderPasses.begin();
			it!=cgShader.shaderPasses.end();it++) {
		shaderPass pass;

		pass.scaleParams = it->scaleParams;
		/* if this is the last pass (the only one that can have CG_SCALE_NONE)
		   and no filter has been set use the GUI setting
		*/
		if(pass.scaleParams.scaleTypeX==CG_SCALE_NONE && !it->filterSet) {
			pass.linearFilter = GUI.BilinearFilter;
		} else {
			pass.linearFilter = it->linearFilter;
		}

        pass.frameCounterMod = it->frameCounterMod;

        pass.floatFbo = it->floatFbo;

		// paths in the meta file can be relative
		_tfullpath(tempPath,_tFromChar(it->cgShaderFile),MAX_PATH);
		char *fileContents = ReadShaderFileContents(tempPath);
		if(!fileContents)
			return false;

        // individual shader might include files, these should be relative to shader
        ReduceToPath(tempPath);
        SetCurrentDirectory(tempPath);

		pass.cgVertexProgram = cgCreateProgram( cgContext, CG_SOURCE, fileContents,
						vertexProfile, "main_vertex", NULL);

		checkForCgError("Compiling vertex program");

		pass.cgFragmentProgram = cgCreateProgram( cgContext, CG_SOURCE, fileContents,
							fragmentProfile, "main_fragment", NULL);

		checkForCgError("Compiling fragment program");

        // set path back for next pass
        SetCurrentDirectory(shaderPath);

		delete [] fileContents;
		if(!pass.cgVertexProgram || !pass.cgFragmentProgram) {
			return false;
		}
		cgGLLoadProgram(pass.cgVertexProgram);
		cgGLLoadProgram(pass.cgFragmentProgram);

		/* generate framebuffer and texture for this pass and apply
		   default texture settings
		*/
		glGenFramebuffers(1,&pass.fbo);
		glGenTextures(1,&pass.tex);
		glBindTexture(GL_TEXTURE_2D,pass.tex);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

		shaderPasses.push_back(pass);
	}

	for(std::vector<CCGShader::lookupTexture>::iterator it=cgShader.lookupTextures.begin();it!=cgShader.lookupTextures.end();it++) {		
		lookupTexture tex;
		strcpy(tex.id,it->id);

		/* generate texture for the lut and apply specified filter setting
		*/
		glGenTextures(1,&tex.tex);
		glBindTexture(GL_TEXTURE_2D,tex.tex);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, it->linearfilter?GL_LINEAR:GL_NEAREST);
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, it->linearfilter?GL_LINEAR:GL_NEAREST);

		_tfullpath(tempPath,_tFromChar(it->texturePath),MAX_PATH);

		// simple file extension png/tga decision
		int strLen = strlen(it->texturePath);
		if(strLen>4) {
			if(!strcasecmp(&it->texturePath[strLen-4],".png")) {
				int width, height;
				bool hasAlpha;
				GLubyte *texData;
				if(loadPngImage(tempPath,width,height,hasAlpha,&texData)) {
					glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
					glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width,
						height, 0, hasAlpha ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE, texData);
					free(texData);
				}
			} else if(!strcasecmp(&it->texturePath[strLen-4],".tga")) {
				STGA stga;
				if(loadTGA(tempPath,stga)) {
					glPixelStorei(GL_UNPACK_ROW_LENGTH, stga.width);
					glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, stga.width,
						stga.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, stga.data);
				}
			}
		}
		lookupTextures.push_back(tex);
	}

	/* enable texture unit 1 for the lookup textures
	*/
	glClientActiveTexture(GL_TEXTURE1);
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
	glTexCoordPointer(2,GL_FLOAT,0,lut_coords);
	glClientActiveTexture(GL_TEXTURE0);

	/* generate textures and set default values for the pref-filled PREV deque.
	*/
	for(int i=0;i<prevPasses.size();i++) {
		glGenTextures(1,&prevPasses[i].tex);
		glBindTexture(GL_TEXTURE_2D,prevPasses[i].tex);
		glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,512,512,0,GL_RGB,GL_UNSIGNED_SHORT_5_6_5,NULL);
		glBindTexture(GL_TEXTURE_2D,0);
		prevPasses[i].textureSize.x = prevPasses[i].textureSize.y = prevPasses[i].textureSize.x = prevPasses[i].textureSize.y = 0;
		memset(prevPasses[i].texCoords,0,sizeof(prevPasses[i].texCoords));
	}

	shaderLoaded = true;
	
	return true;
}
Example #8
0
void readTex(const std::string &fileName) {

    std::string filePath = fileName;

    int w, h;
    png_bytepp p = readpng(filePath.c_str(), &w, &h);

    /*
    gData = new unsigned char [w * h * 3];

    for(int y=0; y<h; y++) {
        png_bytep r = p[h-1-y]; // get the row
        for (int x = 0; x < 3*w; x += 3) {
            int index = x + (3 * w * y);
            gData[index] = r[x];
            gData[index + 1] = r[x+1];
            gData[index + 2] = r[x+2];
            //std::cout << index << " " << int(r[x]) << std::endl;
            //std::cout << index + 1 << " " << int(r[x+1]) << std::endl;
            //std::cout << index + 2 << " " << int(r[x+2]) << std::endl;
        }
    }
    */

    std::cout << "READ" << std::endl;

    //gWidth = w;
    //gHeight = h;

    GLubyte *textureImage;
    int width, height;
    bool hasAlpha;
    //char filename[] = "yoshihq2x.png";
    //char filename[] = "yoshi_side.png";
    char *filename = new char[filePath.size()+1];
    filename[filePath.size()]=0;
    memcpy(filename,filePath.c_str(),filePath.size());

    bool success = loadPngImage(filename, width, height, hasAlpha, &textureImage);
    if (!success) {
        std::cout << "Unable to load png file" << std::endl;
        return;
    }

    gWidth = width;
    gHeight = height;
    gData = new unsigned char [width * height * 4];
    std::cout << "Image loaded " << width << " " << height << " alpha " << hasAlpha << std::endl;
    int count = 0;
    for (int i = 0; i < width * height; i++) {
        if (hasAlpha) {
            gData[4*i] = textureImage[4*i];
            gData[4*i + 1] = textureImage[4*i + 1];
            gData[4*i + 2] = textureImage[4*i + 2];
            gData[4*i + 3] = textureImage[4*i + 3];
        } else {
            gData[4*i] = textureImage[3*i]; // since textureImage now is just RGB
            gData[4*i + 1] = textureImage[3*i + 1];
            gData[4*i + 2] = textureImage[3*i + 2];
            gData[4*i + 3] = 0;     
        }

        //std::cout << i << " "<< int(textureImage[i]) << std::endl;
        /*
        if (i % 4 == 0) {
            continue;
        } else {
            gData[count] = textureImage[i];
            count++;
        }
        */
    }
}