/*---------------------------------------------------------------------------* Project: NintendoWare File: font_Font.cpp Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo and/or its licensed developers and are protected by national and international copyright laws. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. The content herein is highly confidential and should be handled accordingly. $Revision: 31311 $ *---------------------------------------------------------------------------*/ #include "precompiled.h" #include #include #include #include #ifdef NW_PLATFORM_CTR #include #endif #include namespace nw { namespace font { namespace internal { void LoadTexture( u16 texWidth, u16 texHeight, TexFmt texFormat, const void* pImage, bool isSmallLinearFilter, bool isLargeLinearFilter ) { GLenum format = GL_ALPHA_NATIVE_DMP; GLenum type = GL_UNSIGNED_BYTE; switch (texFormat) { case FONT_SHEET_FORMAT_A4: format = GL_ALPHA_NATIVE_DMP; type = GL_UNSIGNED_4BITS_DMP; break; case FONT_SHEET_FORMAT_A8: format = GL_ALPHA_NATIVE_DMP; type = GL_UNSIGNED_BYTE; break; case FONT_SHEET_FORMAT_LA4: format = GL_LUMINANCE_ALPHA_NATIVE_DMP; type = GL_UNSIGNED_BYTE_4_4_DMP; break; case FONT_SHEET_FORMAT_LA8: format = GL_LUMINANCE_ALPHA_NATIVE_DMP; type = GL_UNSIGNED_BYTE; break; case FONT_SHEET_FORMAT_RGBA4: format = GL_RGBA_NATIVE_DMP; type = GL_UNSIGNED_SHORT_4_4_4_4; break; case FONT_SHEET_FORMAT_RGB5A1: format = GL_RGBA_NATIVE_DMP; type = GL_UNSIGNED_SHORT_5_5_5_1; break; case FONT_SHEET_FORMAT_RGBA8: format = GL_RGBA_NATIVE_DMP; type = GL_UNSIGNED_BYTE; break; case FONT_SHEET_FORMAT_RGB565: format = GL_RGB_NATIVE_DMP; type = GL_UNSIGNED_SHORT_5_6_5; break; case FONT_SHEET_FORMAT_RGB8: format = GL_RGB_NATIVE_DMP; type = GL_UNSIGNED_BYTE; break; default: NN_ASSERTMSG(false, "CharWriter::LoadTexture() : Unknown font sheet format(=%d)", texFormat); } const GLint mipLevel = 0; // テクスチャのメモリへの読み込み指定 int texLoadFlag = #ifdef NW_PLATFORM_CTR // フォントリソースがメモリに存在していることが前提であるため、 // FCRAMのものを直接参照してもらい、コピーしない。 NN_GX_MEM_FCRAM | GL_NO_COPY_FCRAM_DMP #else 0 #endif ; glTexImage2D(GL_TEXTURE_2D | texLoadFlag, mipLevel, format, texWidth, texHeight, 0, format, type, pImage); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); GLint filter = isSmallLinearFilter ? GL_LINEAR: GL_NEAREST; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); filter = isLargeLinearFilter ? GL_LINEAR: GL_NEAREST; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, 0.0f); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, -1000); } TextureObject::TextureObject() { Reset(); } void TextureObject::Set( u32 name, const Font* pFont, const void* pImage, TexFmt format, u16 width, u16 height ) { m_Name = name; m_pFont = pFont; m_pImage = pImage == NULL ? 0: #ifdef NW_PLATFORM_CTR (nngxGetPhysicalAddr(reinterpret_cast(pImage)) / 8) #else reinterpret_cast(pImage) #endif ; m_Format = static_cast(format); m_Size.width = width; m_Size.height = height; } } // namespace internal Glyph::Glyph() : isSheetUpdated(false) { } Font::~Font() { } const CharStrmReader Font::GetCharStrmReader(char /* dummy */) const { CharStrmReader::ReadNextCharFunc func = NULL; switch (GetCharacterCode()) { case CHARACTER_CODE_UNICODE: func = &CharStrmReader::ReadNextCharUTF8; break; case CHARACTER_CODE_SJIS: func = &CharStrmReader::ReadNextCharSJIS; break; case CHARACTER_CODE_CP1252: func = &CharStrmReader::ReadNextCharCP1252; break; default: NN_ASSERT(false); break; } return CharStrmReader(func); } const CharStrmReader Font::GetCharStrmReader(wchar_t /* dummy */) const { CharStrmReader::ReadNextCharFunc func = NULL; switch (GetCharacterCode()) { case CHARACTER_CODE_UNICODE: func = &CharStrmReader::ReadNextCharUTF16; break; default: NN_ASSERT(false); break; } return CharStrmReader(func); } } // namespace font } // namespace nw