// Creating a new window. Window::Window(std::string title, int width, int height, bool fullscreen) throw(HCException) { this->title = title; this->width = width; this->height = height; this->fullscreen = fullscreen; if (SDL_Init(SDL_INIT_EVERYTHING) != 0) throw HCException("Failed to initialize SDL.\n", HC_WINDOW_EXCEPTION); this->window = SDL_CreateWindow( title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, fullscreen ? SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN : SDL_WINDOW_SHOWN ); if (this->window == nullptr) { SDL_Quit(); throw HCException("Failed to open SDL window.\n", HC_WINDOW_EXCEPTION); } this->renderer = SDL_CreateRenderer( this->window, 0, SDL_RENDERER_ACCELERATED ); if (this->renderer == nullptr) { this->error = true; SDL_DestroyWindow(this->window); SDL_Quit(); throw HCException("Failed to create SDL renderer.\n", HC_WINDOW_EXCEPTION); } }
void GlTexture::init(GLenum target, const Vec2i& size, int depth, GLenum internal_format, GLenum format, GLenum type, const void* ptr, GLenum minFilter, GLenum magFilter, GLenum wrap) { if (m_obj != -1) destroy(); m_target = target; glGenTextures(1, &m_obj); //printf(":%d\n", m_obj); glBindTexture(target, m_obj); mglCheckErrorsC("bind"); if (target == GL_TEXTURE_2D) { #ifdef QT_CORE_LIB // see http://www.opengl.org/wiki/Common_Mistakes glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); #endif if (ptr != nullptr) { glTexImage2D(target, 0, internal_format, size.width, size.height, 0, format, type, ptr); mglCheckErrorsC("tex2d"); } } else { throw HCException("texture not supported"); } /*if (target == GL_TEXTURE_1D) { glTexImage1D(target, 0, internal_format, size.width, 0, format, type, ptr); mglCheckErrorsC("tex1d"); } else if ((target == GL_TEXTURE_3D) || (target == GL_TEXTURE_2D_ARRAY_EXT)) { glTexImage3D(target, 0, internal_format, size.width(), size.height(), depth, 0, format, type, ptr); mglCheckErrorsC("tex3d"); }*/ /*if (minFilter == GL_LINEAR_MIPMAP_LINEAR || minFilter == GL_NEAREST_MIPMAP_LINEAR || minFilter == GL_LINEAR_MIPMAP_NEAREST || minFilter == GL_NEAREST_MIPMAP_NEAREST) { glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); }*/ glTexParameteri(target, GL_TEXTURE_MIN_FILTER, minFilter); glTexParameteri(target, GL_TEXTURE_MAG_FILTER, magFilter); glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap); glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap); //glTexParameteri(target, GL_TEXTURE_WRAP_R, wrap); m_size = Vec3i(size.width, size.height, depth); mglCheckErrorsC("texture"); }
void HCError( int err_num, ... ) { ErrString string = err_strings[err_num]; va_list values; fputc( '\n', stderr ); va_start( values, err_num ); ErrorPrint( stderr, string, values ); va_end( values ); // Throw an exception to jump back to main(). throw HCException(); }