示例#1
0
文件: texture.cpp 项目: yumikokh/bado
bool CTexture::loadTexture2D(string a_sPath, bool bGenerateMipMaps)
{
	FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
	FIBITMAP* dib(0);

	fif = FreeImage_GetFileType(a_sPath.c_str(), 0); // Check the file signature and deduce its format

	if(fif == FIF_UNKNOWN) // If still unknown, try to guess the file format from the file extension
		fif = FreeImage_GetFIFFromFilename(a_sPath.c_str());
	
	if(fif == FIF_UNKNOWN) // If still unknown, return failure
		return false;

	if(FreeImage_FIFSupportsReading(fif)) // Check if the plugin has reading capabilities and load the file
		dib = FreeImage_Load(fif, a_sPath.c_str());
	if(!dib)
		return false;

	BYTE* bDataPointer = FreeImage_GetBits(dib); // Retrieve the image data

	// If somehow one of these failed (they shouldn't), return failure
	if(bDataPointer == NULL || FreeImage_GetWidth(dib) == 0 || FreeImage_GetHeight(dib) == 0)
		return false;

	GLenum format = FreeImage_GetBPP(dib) == 24 ? GL_BGR : FreeImage_GetBPP(dib) == 8 ? GL_LUMINANCE : 0;
	createFromData(bDataPointer, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), FreeImage_GetBPP(dib), format, bGenerateMipMaps);
	
	FreeImage_Unload(dib);

	sPath = a_sPath;

	return true; // Success
}
示例#2
0
TexturePtr TextureFactory::createFromPngFile(const File& file) {

    PngImage png(file);
    
    cross::RenderSystem::ColorFormat color_format = cross::RenderSystem::ColorFormat::RGB;
    switch (png.color_type_) {
        
    case PNG_COLOR_TYPE_RGB:
        color_format = cross::RenderSystem::ColorFormat::RGB;
        break;
    
    case PNG_COLOR_TYPE_RGBA:
        color_format = cross::RenderSystem::ColorFormat::RGBA;
        break;
    default:
        T3_PANIC( "unknown color format." );
        break;
    }
    
    TexturePtr tex = createFromData(
        file.name(),
        png.width_,
        png.height_,
        color_format,
        cross::RenderSystem::TypeFormat::UNSIGNED_BYTE,
        png.data_
    );
    
    return tex;
}
示例#3
0
bool CTexture::loadTexture2D(std::string sTexturePath, bool bGenerateMipMaps)
{
	FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
	FIBITMAP* dib(0);

	fif = FreeImage_GetFileType(sTexturePath.c_str(), 0); // 检查文件签名,推导其格式
	if(fif == FIF_UNKNOWN) fif = FreeImage_GetFIFFromFilename(sTexturePath.c_str()); 	// 从扩展名猜测格式
	if(fif == FIF_UNKNOWN) return false;

	//clock_t begin = clock();
	if(FreeImage_FIFSupportsReading(fif)) dib = FreeImage_Load(fif, sTexturePath.c_str());
	if(!dib) return false;
	//clock_t end = clock();
	//cout << end - begin << endl;
		
	GLubyte* bDataPointer = FreeImage_GetBits(dib);
	if(bDataPointer == NULL || FreeImage_GetWidth(dib) == 0 || FreeImage_GetHeight(dib) == 0)
		return false;

	GLenum format = FreeImage_GetBPP(dib) == 24 ? GL_BGR : FreeImage_GetBPP(dib) == 8 ? GL_LUMINANCE : 0;
	createFromData(bDataPointer, 
		FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), FreeImage_GetBPP(dib), format, bGenerateMipMaps);

	FreeImage_Unload(dib);

	m_sTexturePath = sTexturePath;
	return true;
}
示例#4
0
bool GfxPalette::palVaryLoadTargetPalette(GuiResourceId resourceId) {
	_palVaryResourceId = resourceId;
	Resource *palResource = _resMan->findResource(ResourceId(kResourceTypePalette, resourceId), false);
	if (palResource) {
		// Load and initialize destination palette
		createFromData(palResource->data, palResource->size, &_palVaryTargetPalette);
		return true;
	}
	return false;
}
示例#5
0
bool GfxPalette::kernelSetFromResource(GuiResourceId resourceId, bool force) {
	Resource *palResource = _resMan->findResource(ResourceId(kResourceTypePalette, resourceId), false);
	Palette palette;

	if (palResource) {
		createFromData(palResource->data, palResource->size, &palette);
		set(&palette, force);
		return true;
	}

	return false;
}
示例#6
0
int16 GfxPalette::kernelPalVaryChangeTarget(GuiResourceId resourceId) {
	if (_palVaryResourceId != -1) {
		Resource *palResource = _resMan->findResource(ResourceId(kResourceTypePalette, resourceId), false);
		if (palResource) {
			Palette insertPalette;
			createFromData(palResource->data, palResource->size, &insertPalette);
			// insert new palette into target
			insert(&insertPalette, &_palVaryTargetPalette);
			// update palette and set on screen
			palVaryProcess(0, true);
		}
	}
	return kernelPalVaryGetCurrentStep();
}
示例#7
0
文件: Texture.cpp 项目: Daivuk/ggj16
    Texture* Texture::createFromFileData(const unsigned char* in_pData, uint32_t in_size, bool in_generateMipmaps)
    {
        Texture* pRet = NULL;

        std::vector<unsigned char> image; //the raw pixels (holy crap that must be slow)
        unsigned int w, h;
        lodepng::State state;
        auto ret = lodepng::decode(image, w, h, state, in_pData, in_size);
        assert(!ret);
        sSize size{w, h};
        byte* pData = &(image[0]);
        ULONG len = size.x * size.y;

        // Pre multiplied
        for (ULONG i = 0; i < len; ++i, pData += 4)
        {
            pData[0] = pData[0] * pData[3] / 255;
            pData[1] = pData[1] * pData[3] / 255;
            pData[2] = pData[2] * pData[3] / 255;
        }

        return createFromData(size, &(image[0]), in_generateMipmaps);
    }
示例#8
0
文件: Texture.cpp 项目: Daivuk/ggj16
    Texture* Texture::createFromFile(const std::string& filename, bool generateMipmaps)
    {
        Texture* pRet = NULL;

        std::vector<unsigned char> image; //the raw pixels (holy crap that must be slow)
        unsigned int w, h;
        auto ret = lodepng::decode(image, w, h, filename);
        assert(!ret);
        sSize size{w, h};
        byte* pData = &(image[0]);
        ULONG len = size.x * size.y;

        // Pre multiplied
        for (ULONG i = 0; i < len; ++i, pData += 4)
        {
            pData[0] = pData[0] * pData[3] / 255;
            pData[1] = pData[1] * pData[3] / 255;
            pData[2] = pData[2] * pData[3] / 255;
        }

        pRet = createFromData(size, &(image[0]), generateMipmaps);
        pRet->m_name = filename.substr(filename.find_last_of("/\\") + 1);
        return pRet;
    }
示例#9
0
	mxFontObject::mxFontObject(void *buffer)
	{
		createFromData(buffer);

	}