QT 在 Framebuffer上的字体显示问题 20C

最近做了一个Linux下的 frambuffer驱动,然后移植了qt5和qt4,
为了做一个简单的demo用于验证驱动是好的。
现在的现象是,通过qt在显示ttf字体的时候,感觉渲染非常糟糕,不知道是驱动问题还是配置问题。
下面两个截图,2个图显示的内容一样,唯一的区别是,字体颜色不同。
为了区分ttf显示样式,还同时显示了点阵字体(所谓qpf字体)。
其中,上方法时间字符串为点阵字体;下发的英文为ttf字体。
图1显示的字体颜色为蓝色,可以看到点阵字体显示正常,但是ttf就很奇怪。
图2显示的字体颜色为白色,两者看起来显示都正常,ttf还蛮好看的。
另外,已经经过直接写入fb验证,rgb颜色序列在驱动中是正确的。
图片说明

图片说明

现在搞不清楚 到底哪里有问题。
另外,也直接使用 FreeType2来读取点阵来显示,这个和直接显示点阵字体一样,没什么问题。

2个回答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 #define IMAGE_WIDTH     128                 
 #define IMAGE_HEIGHT    96
 
//set to 0 means use internal fp_ops
static struct fb_ops oledfb_ops ={.owner        = THIS_MODULE,};
static struct fb_info *oled_fb_info;
 
int fb_init(void)
{
    int r;
     
    oled_fb_info=framebuffer_alloc(0, NULL);
     
     
    strcpy(oled_fb_info->fix.id, "OLED-SPI-1.27");
     
    oled_fb_info->fix.smem_len    = IMAGE_WIDTH*IMAGE_HEIGHT*3;
    oled_fb_info->fix.type        = FB_TYPE_PACKED_PIXELS;
    oled_fb_info->fix.visual      = FB_VISUAL_TRUECOLOR;
    oled_fb_info->fix.line_length = IMAGE_WIDTH * 3;
 
    oled_fb_info->var.xres             = IMAGE_WIDTH;
    oled_fb_info->var.yres             = IMAGE_HEIGHT;
    oled_fb_info->var.xres_virtual     = IMAGE_WIDTH;
    oled_fb_info->var.yres_virtual     = IMAGE_HEIGHT;
    oled_fb_info->var.bits_per_pixel   = 24;
     
    oled_fb_info->var.height=19;//mm unit
    oled_fb_info->var.width=26;//mm unit
     
     
    oled_fb_info->var.red.offset       = 16;
    oled_fb_info->var.green.offset     = 8;
    oled_fb_info->var.blue.offset      = 0;
     
    oled_fb_info->var.red.length       = 8;
    oled_fb_info->var.blue.length      = 8;
    oled_fb_info->var.green.length     = 8;
     
     
    oled_fb_info->fbops=&oledfb_ops;
     
    //oled_fb_info->pseudo_palette=colregs;
     
    //this is used fo mmap
    oled_fb_info->fix.smem_start = virt_to_phys(pOledDrv->pFrameBuffer);
    oled_fb_info->screen_base    = pOledDrv->pFrameBuffer;
     
    r=register_framebuffer(oled_fb_info);
 
    printk("register fb :%d\n",r);
     
    printk("fb buffer:%x,(P:%lx)\n",(int)oled_fb_info->screen_base,oled_fb_info->fix.smem_start);
     
    return 0;
}

问题找到,是驱动问题,因为我的屏幕需要对每一个色值进行 >>2才能正常。
也就是我的屏幕支持的颜色为6*6*6模式。。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
linux framebuffer尺寸问题
环境:vm ubuntu14.04 设置: /etc/default/grub GRUB_CMDLINE_LINUX="vga=0x305" 问题: 实际尺寸与显示尺寸不一致! for(i=0;i<h;i++) { for(j=0;j < w;j++) { fbmem[i*w+j] = 0xffffff; } } 利用framebuffer时,本来应该全屏显示白色,宽度正确,高度只有一半。 可是 ioctl(Fd,FBIOGET_VSCREENINFO,&fb_var); w = fb_var.xres; h = fb_var.yres; bpp = fb_var.bits_per_pixel; printf("Framebuffer:%d*%d bpp:%d\n",w,h,bpp); 程序打印高度和宽度是正确的,为1024*768 请问大家这是为什么?
怎么设置QWS透明和帧缓存区Framebuffer透明
我的QT对话框后面是采集的视频,我想让QWS和Framebuffer透明 ,这样QT那一层就不至于遮住太多视频了
嵌入式往显示器framebuffer里拷贝数据速度过慢
往显示设备的framebuffer里写1080i的视频数据速度特别慢,拷贝一帧要200ms左右,部分代码如下: for(j=0; j<controlSystem.height; j++) { memcpy(dst,pplaybuf,controlSystem.width*sizeof(unsigned int)); dst+=finfo.line_length ; pplaybuf+=controlSystem.width; } 如何优化或者提高速度。正常往其他内存里拷贝1080i50的一帧数据只要20ms。现在想这样: 1.每次都把要显示pplaybuf里的数据(有缓冲)映射到显示内存里,显示完卸载,下次再映射。可以实现吗?我现在遇到一个问题mmap里的MAP_FIXED参数可以使用指定的映射起始地址,但是会把之前的数据丢弃,这个不知道该怎么解决。 2.使用双缓冲,但是效果不好。每个线程的每帧拷贝时间更长了。 求大神解答该怎么办?在线等
framebuffer 输出尺寸和实际尺寸不一只
各位高手,小弟头一次提问,见谅了,问题如下: 本人pc显示分辨率是1366*768,32位色,装的是ubuntu 12.04 内核版本是3.2.0的,实体机 在按Ctlr+Alt+f1 进入命令行终端,利用framebuffer输出时不能满屏,比如以下代码: k=0; for(i=0; i<768; i++) { for(j=0; j<1366; j++) { *(fp+k+0)=颜色值; ............... *(fp+k+3)=0(这个是通道透明); } k+=4; } 大概的代码就是以上这样的逻辑,这样可以看到整个屏幕清一色效果,但是输出是不满屏的, 就算我指定输出某一行也是没有1366个点,指定输出一行时,那个点数改成1377时,可以正常输出一行, 但是我在for循环时,改成j<1377; 程序运行时提示段错误,fb指向了不该指的地址,造成的, 各位高手有遇到这样的问题吗,
怎么设置qws背景透明和Framebuffer透明
怎么设置qws背景透明和Framebuffer透明!!!!!!!!!!!!!!!!!!!
opengles在嵌入式中的显示需要怎么做?
玩过ES和EGL的都知道,可以通过EGL的API进行初始化设置之后,可以调用Gles的API在被绑定的窗口中绘制图像。而现在我要将ES的API移植到嵌入式系统上。但是这个嵌入式系统没有Windows中的窗口系统。我要如何才能调用ES的API实现在LCD屏上绘制图像呢?意思就是,如何单纯的将OpenGL ES的API绑定到LCD屏上,或者它的FrameBuffer上,让它显示OpenGL绘制的图像?求高人来指点..
求助!!!framebuffer内存问题!!
我使用的是三星2.6.35.7 的内核版本,现在在看LCD的驱动,发现内核中是只对了window 2做了内存映射,fb0的smem_start也有具体的地址内容,但fb1 fb2 fb3 fb4他们的smem_start是空值(NULL),说明内核并没有为他们分配空间,那我该怎么使用这些fb呢? 谢谢大神!
怎么设置帧缓冲区透明
我的QT对话框后面是采集的视频,我想让Qt所在的framebuffer设置成透明的,这样就能看到后面的视频了!!!不胜感激!!![图片说明](https://img-ask.csdn.net/upload/201501/16/1421373732_280956.jpg)
framebuffer 一行一行memcpy耗时,直接写int很快,大侠们这是为什么?
往显示设备的framebuffer里写1080i的视频数据速度特别慢,拷贝一帧要200ms左右,部分代码如下: for(j=0; j<controlSystem.height; j++) { memcpy(dst,pplaybuf,controlSystem.width*sizeof(unsigned int)); dst+=finfo.line_length ; pplaybuf+=controlSystem.width; } 如何优化或者提高速度。正常往其他内存里拷贝1080i50的一帧数据只要20ms;
OpenGL 输入多个渲染缓存数据不一致的问题
我在示例代码中申请了一个帧缓存对象: ``` int FrameBuf; glGenFramebuffers(1, &FrameBuf); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FrameBuf); ``` 三个渲染缓存对象,第1个和第3个分别绑定为帧缓存对象的COLOR_ATTACHMENT0和COLOR_ATTACHMENT1,第2个绑定到帧缓存对象的DEPTH_ATTACHMENT: ``` glGenRenderbuffers(3, RendBuf); glBindRenderbuffer(GL_RENDERBUFFER, RendBuf[0]); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 200, 200); glBindRenderbuffer(GL_RENDERBUFFER, RendBuf[1]); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 200, 200); glBindRenderbuffer(GL_RENDERBUFFER, RendBuf[2]); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 200, 200); ``` 设置绑定点: ``` glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, RendBuf[0]); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, RendBuf[1]); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_RENDERBUFFER, RendBuf[2]); ``` 然后在绘制到帧缓存对象中: ``` glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FrameBuf); glViewport(0, 0, 200, 200); GLenum bufs[2] = { GL_COLOR_ATTACHMENT0 , GL_COLOR_ATTACHMENT1}; glDrawBuffers(2, bufs); glBindVertexArray(vert); glEnable(GL_DEPTH_TEST); glDrawArrays(GL_TRIANGLES, 0, 6); ``` 再将缓存中的数据写入显示窗口的缓存: ``` glBindFramebuffer(GL_READ_FRAMEBUFFER, FrameBuf); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glViewport(0, 0, 400, 400); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glReadBuffer(GL_COLOR_ATTACHMENT0); glBlitFramebuffer(0, 0, 200, 200, 0, 0, 200, 200, GL_COLOR_BUFFER_BIT, GL_NEAREST); glReadBuffer(GL_COLOR_ATTACHMENT1); glBlitFramebuffer(0, 0, 200, 200, 200, 0, 400, 200, GL_COLOR_BUFFER_BIT, GL_NEAREST); ``` 这是三角形的数据: ``` Vertex Verts[9] = { //第一个大三角形,三个顶点颜色分别为RGB,前四个float为颜色,后三个float为位置 { { 255,0,0,255 },{ 0.0f, 0.9f, 0.0f } }, { { 0,255,0,255 },{ -0.9f, -0.9f, 0.0f } }, { { 0,0,255,255 },{ 0.9f, -0.9f, 0.0f } } , //第二个小三角形,三个顶点颜色为白色 { { 255,255,255,255 },{ 0.0f, 0.8f, -0.2f } } , { { 255,255,255,255 },{ -0.4f, 0.0f, -0.2f } } , { { 255,255,255,255 },{ 0.4f, 0.0f, -0.2f } } }; ``` 以上就是画了两个小三角形,attachment0的在左下角,attachment1的在右下角。按理来说只调用了一次glDrawArrays(),两个三角形应该是一样的,但是真实的图片显示并不一样。这是为什么呢? ![图片说明](https://img-ask.csdn.net/upload/201911/28/1574911083_510881.png)
字符设备随机访问 framebuffer是可以随机访问吗
大神: 请教一问题, LCD设备是字符设备,我再一本书上看到说,可以随机访问, 请问,是这样的吗,我没有找到依据,请大神赐教,感激涕零!!
OpenGL ES如何使用framebuffer。
我使用纹理贴图的方式渲染出来一个简单的三维地形,然后我想将视点看到的场景渲染到一张纹理中, 这样我就可以使用这完整的纹理做其他事情了,比如实现分屏显示,两个屏幕只要渲染一张纹理就可以了。但是我不知道怎么实现。求指导!
关于frambuffer的注册,主设备号和从设备号的关系
linux内核的fbmem.c中注册了一个fb的字符设备,在平台代码(MTK或者高通)中会注册具体的framebuffer设备(两个设备的主设备号相同)。具体注册的设备(fb0,fb1...)的访问全部都是使用fb的file_operations接口。关于字符设备,linux里面的机制是什么?linux如何实现多个字符设备使用统一的file_operations接口的?
安卓手机屏幕同步PC端技术的实现
RT,自己要实现一个Android手机同步屏幕到PC端的java工具中,网上查了很多资料,大概分为以下几种: 1、读取framebuffer的数据,但该数据存放在/dev/graphics/fb0中,该目录的访问需要root权限。 2、DLNA:这种方式主要通过无线传输的方式,传送到PC端,然后再用网页显示出来(不知道我有没理解错?)。我需要usb有线连接,adb传输的。 3、Android screen monitor:使用ddmslib.jar的方式,进行截图,然后PC端工具将图片显示出来。这种方式不流畅,刷新一次要1500ms以上。 目前也就实现了第三种,但是实在是太卡了,请问各位大神啊,使用USB有线如何实现安卓实时同步屏幕啊?有什么好的实现思路?小弟先行谢过~~~~
关于安卓4.4.2高速截屏如何实现
关于安卓截屏的研究,本人是经过比较长的时间努力的,可以说尝试了各种方法。如果我能凭自己的力量来解决的话,我是坚决不会做伸手党的。但是,各种方法尝试完却逐一以失败告终。首先,我先把我的问题讲清楚。然后,我再把我的各种失败经历都写上。最后,请有心人帮忙解决下我的问题。 我的问题是:我需要的安卓截屏,当然不是截取自身程序的画面,而是截取任意程序或者任意界面的画面。并且,截屏的速度必须在100毫秒内完成。(截屏到内存的时间在100毫秒内,保存位图到SD卡的时间不算在内) 以下是我各种方法的尝试经历: 第一种,利用SDK提供的View.getDrawingCache()方法。失败原因:只能截取自身程序的屏幕画面。 第二种,利用命令行“ScreenCap -P”。失败原因,截屏速度非常慢,在500毫秒到1500毫秒之间截取一次。 第三种,利用系统的隐藏API,Screenshot。这个需要系统权限,我按照网上教程将APK重新签名为系统权限。但是无效,无法截屏。失败原因:未知。这个只有自己去实践才知道,这个方法或许在安卓以前的版本是可行的。另外,反射来调用该API是无效的。 第四种,基于Android ddmlib进行截屏。失败原因,截屏速度非常慢,跟命令行截屏的速度差不多,可能还要差一点。 第五种,直接读取framebuffer。直接是不能读取framebuffer的,需要设置该文件的读写权限,这我是知道的。在安卓4.1.1版本,这是可行的方案,速度也极快,一般在30毫秒左右完成。但是,在安卓4.2版本以后,系统似乎对该方法进行了屏蔽。具体的表现是,第一次读取,能非常完美读取出屏幕图像。第二次,第三次读取的时候,你会发现,除了状态栏以外,其他部分都是空白的。关于这一点,我百思不得其解,不知道其原因是什么。而当你切换一下程序,或者切换下横屏竖屏时,再读取,那么又是一张完整的屏幕图像了。失败原因:未知。 第六种,利用一个开源项目android-screen-library来截屏。失败原因:速度极慢。 以上6种,可以说是我搜遍全网找到的6种截屏方式了。但是,无一能够满足我的需求。本人初学安卓不久,无力解决,请各位达人帮帮忙。在此谢过!
linux下一类字符设备使用同一个主设备号进行注册的一点疑惑?
最近在看framebuffer的内核源码: 在fbmem.c中有 register_chrdev(FB_MAJOR,"fb",&fb_fops) 这里的fb_fops应该就是上层访问的接口(write、read、mmap等操作). 在注册一个frambuffer设备的时候,会使用register_framebuffer,追踪可以看到 fb_info->dev = device_create(fb_class, fb_info->device, MKDEV(FB_MAJOR, i), NULL, "fb%d", i); 如果注册一个设备fb0,那么在访问fb0的时候应该是执行fb_fops的操作函数。 请问:它们是如何通过一个主设备号实现关联的? 我猜测和 device_create有关,但是由于水平有限,追踪源码没有找到结果
ARM 上进行视屏截屏是死机
在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~ struct fb_fix_screeninfo finfo; struct fb_var_screeninfo vinfo; uchar *frameBuffer = NULL; long int screensize = 0; (fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备) qint32 fd = open("/dev/graphics/fb1", O_RDONLY); if (fd < 0) { fd = open("/dev/fb", O_RDONLY); if (fd < 0) { return false; } } if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) { return false; } if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) { return false; } screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; int curViewOffset = vinfo.yoffset/480; frameBuffer = (uchar *) mmap(0, /* start */ screensize, /* bytes */ PROT_READ, /* prot */ MAP_SHARED, /* flags */ fd, /* fd */ screensize * curViewOffset /* offset */); if (MAP_FAILED == frameBuffer) { return false; } 只要对frameBuffer进行读取就死机!
关于opengl帧缓存对象FBO深度缓存的问题
各位老师好,在下opengl菜鸟一枚,最近学习opengl和glsl的过程中,使用FBO的深度缓存做延时渲染的时候遇到了一些问题。 我想实现个shadowmap,在光源视角下将深度缓存渲染进fbo,但是渲染第一次结束后,附加到fbo中的深度纹理里面的值却全部都为0。后来为了测试问题,我删除掉了第二个shader,只保留了第一个用来产生shadowmap的shader,发现fbo深度缓存依然都是0。如能指教迷津,不胜感激。一下是我的代码: main函数 ``` #include <stdio.h> #include "Declaration.h" #include "LoadShaders.h" #include <gl/glew.h> #include <gl/freeglut.h> #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "StructDef.h" GLuint *FBOUsedVAOs; GLuint *FBOUsedBuffers; GLuint *programs; GLuint *FBOs; GLuint *DepthTextureIDs; void init() { DepthTextureIDs = (GLuint*)malloc(sizeof(GLuint));//申请深度纹理对象ID的内存 glGenTextures(1, DepthTextureIDs);//产生深度纹理ID glBindTexture(GL_TEXTURE_2D, DepthTextureIDs[0]);//绑定深度纹理ID //设置纹理参数 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 512, 512, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glBindTexture(GL_TEXTURE_2D, 0);//解绑纹理ID FBOs = (GLuint*)malloc(sizeof(GLuint));//申请帧缓存对象的内存 glGenFramebuffers(1,FBOs);//产生帧缓存对象 glBindFramebuffer(GL_FRAMEBUFFER, FBOs[0]);//绑定帧缓存对象 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, DepthTextureIDs[0], 0); glDrawBuffer(GL_NONE); glReadBuffer(GL_NONE); glBindFramebuffer(GL_FRAMEBUFFER, 0);//解绑帧缓存对象 programs = (GLuint*)malloc(sizeof(GLuint));//申请着色程序内存 ShaderInfo FBOShader[3] = { //用于渲染shadowmap的着色器 { GL_VERTEX_SHADER, "FBOShader.vert" }, { GL_FRAGMENT_SHADER, "FBOShader.frag" }, { GL_NONE, NULL } }; programs[0] = LoadShaders(FBOShader); //加载着色器 //计算各种坐标转换矩阵 float ModelMat[16]; float ViewMat[16]; float PerspectiveProjectMat[16]; float MAngle321[3] = {0, 0, 0.0}; float MOffset[3] = {0.0, 0.0, 0.0}; float VAngle321[3] = {0, 1.57, 0.0}; float VOffset[3] = {0, 0, 5.0}; float FOV = 1.57; float Aspect = 1; float NearDist = 1.0; float FarDist = 6; ModelMatCal(ModelMat, MAngle321, MOffset); ViewMatCal(ViewMat, VAngle321, VOffset); PerspectiveProjectMatCal(PerspectiveProjectMat, FOV, Aspect, NearDist, FarDist); float MVMat[16]; float MVPMat[16]; MatMultiplyMat4(MVMat, ViewMat, ModelMat); MatMultiplyMat4(MVPMat, PerspectiveProjectMat, MVMat); //将矩阵传递进FBOShader glUseProgram(programs[0]);//必须放在向shader中传Uniform数据的前面 GLint MVPMatLoc; MVPMatLoc = glGetUniformLocation(programs[0],"MVPMat"); glUniformMatrix4fv(MVPMatLoc, 1, GL_FALSE, MVPMat); //设置顶点数组 #define BUFFER_OFFSET(offset) ((void *)(NULL+offset)) FBOUsedVAOs = (GLuint*)malloc(sizeof(GLuint)); FBOUsedBuffers = (GLuint*)malloc(sizeof(GLuint)); glGenVertexArrays(1, FBOUsedVAOs); glGenBuffers(1, FBOUsedBuffers); float FBOUsedVertices[24]= { 1.0f, 1.0f, 3.0f, 1.0f, -1.0f, 1.0f, 3.0f, 1.0f, -1.0f, -1.0f, 3.0f, 1.0f, 1.0f, 1.0f, 3.0f, 1.0f, -1.0f, -1.0f, 3.0f, 1.0f, 1.0f, -1.0f, 3.0f, 1.0f }; glBindVertexArray(FBOUsedVAOs[0]); glBindBuffer(GL_ARRAY_BUFFER, FBOUsedBuffers[0]); glBufferData(GL_ARRAY_BUFFER, sizeof(FBOUsedVertices), FBOUsedVertices, GL_STATIC_DRAW); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); glEnableVertexAttribArray(0); } void display() { //向帧缓存对象中渲染数据 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBindFramebuffer(GL_FRAMEBUFFER, FBOs[0]);//绑定帧缓存对象 glUseProgram(programs[0]);//选定shader glBindVertexArray(FBOUsedVAOs[0]); glDrawArrays(GL_TRIANGLES, 0, 6); float *DepthPixel = (float *)malloc(sizeof(float)); glReadPixels(256,256,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,DepthPixel); glBindFramebuffer(GL_FRAMEBUFFER, 0); glFlush(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutInitContextVersion(4, 3); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); glewExperimental = GL_TRUE; if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(1); } glEnable(GL_TEXTURE_CUBE_MAP); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); init(); glutDisplayFunc(display); glutMainLoop(); } ``` 顶点着色器 ``` #version 430 layout(location = 0)in vec4 VertPosition; uniform mat4 MVPMat; void main() { gl_Position = MVPMat * VertPosition; } ``` 片元着色器 ``` #version 430 out vec4 FragColor; void main() { FragColor = vec4(vec3(gl_FragCoord.z), 1.0f); } ``` 将display函数中的glBindFramebuffer(GL_FRAMEBUFFER, FBOs[0])注释掉,就能够在DepthPixel中看到正确的深度结果,但是只要绑定了fbo,其深度结果就全都是0.也就是说,在屏渲染的时候,我能够获取到正确的深度值,但是离屏渲染的时候,深度值总是0.
linux下/dev/fb0怎样解析成windows下可以显示的图片
cat /dev/fb0 > /tmp/jietu 这样截取到的原始位图,复制到windows下之后改名为.png或者.bmp都不能打开; 据说要根据设备分辨率和颜色位深解析之后才可以,求具体解析算法,最好有代码~~
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问