IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [C++] [OpenGL ES 3.0] 写了个GLTexture -> 正文阅读

[C++知识库][C++] [OpenGL ES 3.0] 写了个GLTexture

p.s.需要stb_image.h,可在github下载
p.s.因为未知原因,写到文件里去后所占内存会增大
p.s.写得不咋地

#ifndef _TEXTURE_HPP_
#define _TEXTURE_HPP_
#include <GLES3/gl3.h>
#include <vector>
#include <fstream>
#include <sstream>
#define STB_IMAGE_IMPLEMENTATION
#include "../stb/stb_image.h"

struct GLTexture
{
	public:
	int w = 0;
	int h = 0;
	GLenum min_filter = GL_NEAREST;
	GLenum mag_filter = GL_NEAREST;
	std::vector<GLubyte> pixels;
	
	public:
	static GLTexture loadGLTFromFile(std::string path)
	{
		GLTexture result;
		std::ifstream fin;
		fin.open(path,std::ios::binary);
		
		fin.read((char*)&result.w,sizeof(int));
		fin.read((char*)&result.h,sizeof(int));
		fin.read((char*)&result.min_filter,sizeof(GLenum));
		fin.read((char*)&result.mag_filter,sizeof(GLenum));
		while(!fin.eof())
		{
			GLubyte pixel;
			fin.read((char*)&pixel,sizeof(GLubyte));
			result.pixels.push_back(pixel);
		}
		
		fin.close();
		return result;
	}
	static void writeToFile(GLTexture texture,std::string path)
	{
		std::ofstream fout;
		fout.open(path,std::ios::binary);
		
		fout.write((char*)&texture.w,sizeof(int));
		fout.write((char*)&texture.h,sizeof(int));
		fout.write((char*)&texture.min_filter,sizeof(GLenum));
		fout.write((char*)&texture.mag_filter,sizeof(GLenum));
		for(auto i : texture.pixels)
		{
			fout.write((char*)&i,sizeof(GLubyte));
		}
		
		fout.close();
	}
	static GLuint toTexture(GLTexture texture,GLenum color_type = GL_RGB,GLenum type = GL_TEXTURE_2D)
	{
		GLuint id;
		glGenTextures(1,&id);
		glBindTexture(type,id);
		glTexImage2D(type,0,color_type,texture.w,texture.h,0,color_type,GL_UNSIGNED_BYTE,texture.pixels.data());
		glTexParameteri(type,GL_TEXTURE_MIN_FILTER,texture.min_filter);
		glTexParameteri(type,GL_TEXTURE_MAG_FILTER,texture.mag_filter);
	}
	static GLTexture toGLTexture(int w,int h,GLubyte* pixels)
	{
		GLTexture texture;
		texture.w = w;
		texture.h = h;
		for(int i = 0;i < w * h;i++)
		{
			texture.pixels.push_back(pixels[i]);
		}
		return texture;
	}
	static GLTexture loadPixelsFromFile(std::string path)
	{
		int w,h,nrc;
		GLubyte * pixels = stbi_load(path.data(),&w,&h,&nrc,0);
		return GLTexture::toGLTexture(w,h,pixels);
	}
};

#endif
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:54:18  更:2021-09-27 13:55:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:28:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计