void CLoadASE::ReadAseFile(t3DModel *pModel) { tMaterialInfo newMaterial = {0}; tMaterialInfo newNormalMap = {0}; t3DObject newObject = {0}; int i = 0; pModel->numOfObjects = GetObjectCount(); pModel->numOfMaterials = GetMaterialCount(); for(i = 0; i < pModel->numOfMaterials; i++) { pModel->pMaterials.push_back(newMaterial); GetTextureInfo(&(pModel->pMaterials[i]), i + 1); } for(i = 0; i < pModel->numOfObjects; i++) { pModel->pObject.push_back(newObject); pModel->pObject[i].materialID = -1; MoveToObject(i + 1); ReadObjectInfo(pModel, &(pModel->pObject[i]), i + 1); ReadObjectData(pModel, &(pModel->pObject[i]), i + 1); } }
TemporaryRef<DeprecatedTextureClient> CompositableClient::CreateDeprecatedTextureClient(DeprecatedTextureClientType aDeprecatedTextureClientType) { MOZ_ASSERT(GetForwarder(), "Can't create a texture client if the compositable is not connected to the compositor."); LayersBackend parentBackend = GetForwarder()->GetCompositorBackendType(); RefPtr<DeprecatedTextureClient> result; switch (aDeprecatedTextureClientType) { case TEXTURE_SHARED_GL: if (parentBackend == LAYERS_OPENGL) { result = new DeprecatedTextureClientSharedOGL(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_SHARED_GL_EXTERNAL: if (parentBackend == LAYERS_OPENGL) { result = new DeprecatedTextureClientSharedOGLExternal(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_STREAM_GL: if (parentBackend == LAYERS_OPENGL) { result = new DeprecatedTextureClientStreamOGL(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_YCBCR: if (parentBackend == LAYERS_OPENGL || parentBackend == LAYERS_D3D11 || parentBackend == LAYERS_BASIC) { result = new DeprecatedTextureClientShmemYCbCr(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_CONTENT: #ifdef XP_WIN if (parentBackend == LAYERS_D3D11 && gfxWindowsPlatform::GetPlatform()->GetD2DDevice()) { result = new DeprecatedTextureClientD3D11(GetForwarder(), GetTextureInfo()); break; } #endif // fall through to TEXTURE_SHMEM case TEXTURE_SHMEM: result = new DeprecatedTextureClientShmem(GetForwarder(), GetTextureInfo()); break; default: MOZ_ASSERT(false, "Unhandled texture client type"); } // If we couldn't create an appropriate texture client, // then return nullptr so the caller can chose another // type. if (!result) { return nullptr; } MOZ_ASSERT(result->SupportsType(aDeprecatedTextureClientType), "Created the wrong texture client?"); result->SetFlags(GetTextureInfo().mTextureFlags); return result.forget(); }
TemporaryRef<TextureClient> CompositableClient::CreateTextureClient(TextureClientType aTextureClientType) { MOZ_ASSERT(GetForwarder(), "Can't create a texture client if the compositable is not connected to the compositor."); LayersBackend parentBackend = GetForwarder()->GetCompositorBackendType(); RefPtr<TextureClient> result; switch (aTextureClientType) { case TEXTURE_SHARED_GL: if (parentBackend == LAYERS_OPENGL) { result = new TextureClientSharedOGL(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_SHARED_GL_EXTERNAL: if (parentBackend == LAYERS_OPENGL) { result = new TextureClientSharedOGLExternal(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_STREAM_GL: if (parentBackend == LAYERS_OPENGL) { result = new TextureClientStreamOGL(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_YCBCR: result = new TextureClientShmemYCbCr(GetForwarder(), GetTextureInfo()); break; case TEXTURE_CONTENT: // fall through to TEXTURE_SHMEM case TEXTURE_SHMEM: if (parentBackend == LAYERS_OPENGL) { result = new TextureClientShmem(GetForwarder(), GetTextureInfo()); } break; default: MOZ_ASSERT(false, "Unhandled texture client type"); } MOZ_ASSERT(result, "Failed to create TextureClient"); MOZ_ASSERT(result->SupportsType(aTextureClientType), "Created the wrong texture client?"); result->SetFlags(GetTextureInfo().mTextureFlags); return result.forget(); }
TemporaryRef<DeprecatedTextureClient> CompositableClient::CreateDeprecatedTextureClient(DeprecatedTextureClientType aDeprecatedTextureClientType, gfxContentType aContentType) { MOZ_ASSERT(GetForwarder(), "Can't create a texture client if the compositable is not connected to the compositor."); LayersBackend parentBackend = GetForwarder()->GetCompositorBackendType(); RefPtr<DeprecatedTextureClient> result; switch (aDeprecatedTextureClientType) { case TEXTURE_SHARED_GL: if (parentBackend == LAYERS_OPENGL) { result = new DeprecatedTextureClientSharedOGL(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_SHARED_GL_EXTERNAL: if (parentBackend == LAYERS_OPENGL) { result = new DeprecatedTextureClientSharedOGLExternal(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_STREAM_GL: if (parentBackend == LAYERS_OPENGL) { result = new DeprecatedTextureClientStreamOGL(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_YCBCR: if (parentBackend == LAYERS_OPENGL || parentBackend == LAYERS_D3D9 || parentBackend == LAYERS_D3D11 || parentBackend == LAYERS_BASIC) { result = new DeprecatedTextureClientShmemYCbCr(GetForwarder(), GetTextureInfo()); } break; case TEXTURE_CONTENT: #ifdef XP_WIN if (parentBackend == LAYERS_D3D11 && gfxWindowsPlatform::GetPlatform()->GetD2DDevice()) { result = new DeprecatedTextureClientD3D11(GetForwarder(), GetTextureInfo()); break; } if (parentBackend == LAYERS_D3D9 && !GetForwarder()->ForwardsToDifferentProcess()) { // We can't use a d3d9 texture for an RGBA surface because we cannot get a DC for // for a gfxWindowsSurface. // We have to wait for the compositor thread to create a d3d9 device before we // can create d3d9 textures on the main thread (because we need to reset on the // compositor thread, and the d3d9 device must be reset on the same thread it was // created on). if (aContentType == GFX_CONTENT_COLOR_ALPHA || !gfxWindowsPlatform::GetPlatform()->GetD3D9Device()) { result = new DeprecatedTextureClientDIB(GetForwarder(), GetTextureInfo()); } else { result = new DeprecatedTextureClientD3D9(GetForwarder(), GetTextureInfo()); } break; } #endif // fall through to TEXTURE_SHMEM case TEXTURE_SHMEM: result = new DeprecatedTextureClientShmem(GetForwarder(), GetTextureInfo()); break; case TEXTURE_FALLBACK: #ifdef XP_WIN if (parentBackend == LAYERS_D3D11 || parentBackend == LAYERS_D3D9) { result = new DeprecatedTextureClientShmem(GetForwarder(), GetTextureInfo()); } #endif break; default: MOZ_ASSERT(false, "Unhandled texture client type"); } // If we couldn't create an appropriate texture client, // then return nullptr so the caller can chose another // type. if (!result) { return nullptr; } MOZ_ASSERT(result->SupportsType(aDeprecatedTextureClientType), "Created the wrong texture client?"); result->SetFlags(GetTextureInfo().mTextureFlags); return result.forget(); }
GLuint MaterialLibrary::loadImage(const char *filename) { GLuint texture; png_structp png_ptr = NULL; png_infop info_ptr = NULL; png_bytep *row_pointers = NULL; int bitDepth, colourType; FILE *pngFile; fopen_s(&pngFile, filename, "rb"); if(!pngFile) return 0; png_byte sig[8]; fread(&sig, 8, sizeof(png_byte), pngFile); rewind(pngFile); if(!png_check_sig(sig, 8)) return 0; png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,NULL,NULL); if(!png_ptr) return 0; if(setjmp(png_jmpbuf(png_ptr))) return 0; info_ptr = png_create_info_struct(png_ptr); if(!info_ptr) return 0; png_init_io(png_ptr, pngFile); png_read_info(png_ptr, info_ptr); bitDepth = png_get_bit_depth(png_ptr, info_ptr); colourType = png_get_color_type(png_ptr, info_ptr); if(colourType == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); if(colourType == PNG_COLOR_TYPE_GRAY && bitDepth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr); if(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); if(bitDepth == 16) png_set_strip_16(png_ptr); else if(bitDepth < 8) png_set_packing(png_ptr); png_read_update_info(png_ptr, info_ptr); png_uint_32 width, height; png_get_IHDR(png_ptr, info_ptr, &width, &height, &bitDepth, &colourType, NULL, NULL, NULL); int components = GetTextureInfo(colourType); if(components == -1) { if(png_ptr) png_destroy_read_struct(&png_ptr, &info_ptr, NULL); return 0; } GLubyte *pixels = (GLubyte *)malloc(sizeof(GLubyte) * (width * height * components)); row_pointers = (png_bytep *)malloc(sizeof(png_bytep) * height); for(unsigned int i = 0; i < height; ++i) row_pointers[i] = (png_bytep)(pixels + (i * width * components)); png_read_image(png_ptr, row_pointers); png_read_end(png_ptr, NULL); // make it glGenTextures(1, &texture); // bind it glBindTexture(GL_TEXTURE_2D, texture); // here we has the problems GLuint glcolours; (components==4) ? (glcolours = GL_RGBA): (0); (components==3) ? (glcolours = GL_RGB): (0); (components==2) ? (glcolours = GL_LUMINANCE_ALPHA): (0); (components==1) ? (glcolours = GL_LUMINANCE): (0); GLubyte a[1000]; strcpy_s((char*)a, sizeof(a), (char*)glGetString(GL_VERSION)); // stretch it glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); //OpenGL 1.1 // gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, glcolours, GL_UNSIGNED_BYTE, pixels); //OpenGL 1.4 // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); //OpenGL 3.0 // http://www.opengl.org/wiki/Common_Mistakes#gluBuild2DMipmaps //On ATI glEnable(GL_TEXTURE_2D); //Warning: It has been reported that on some ATI drivers, //glGenerateMipmap(GL_TEXTURE_2D) has no effect unless you //precede it with a call to glEnable(GL_TEXTURE_2D) in this particular case. //Once again, to be clear, bind the texture, glEnable, then glGenerateMipmap. //This is a bug and has been in the ATI drivers for a while. //Perhaps by the time you read this, it will have been corrected. //(glGenerateMipmap doesn't work on ATI as of 2011) // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // glGenerateMipmap(GL_TEXTURE_2D); //Generate mipmaps now!!! glTexImage2D(GL_TEXTURE_2D, 0, components, width, height, 0, glcolours, GL_UNSIGNED_BYTE, pixels); png_destroy_read_struct(&png_ptr, &info_ptr, NULL); fclose(pngFile); free(row_pointers); free(pixels); return texture; }