Tôi đang sử dụng lõi i5 với bộ tăng tốc đồ họa tích hợp GMA-HD chạy trên Hệ điều hành RHEL 6.0. Tôi cần kiểm tra khả năng tăng tốc đồ họa của trình điều khiển đồ họa (mà tôi phát hiện ra là i915 trong PC của mình). Tôi đã sử dụng đoạn mã sau (mà tôi nhận được từ internet với một số sửa đổi) để soạn thảo bằng framebuffer.Ghi vào bộ đệm khung
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
int main()
{
int fbfd = 0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long int screensize = 0;
char *fbp = 0;
int x = 0, y = 0;
long int location = 0;
int count ;
/* Open the file for reading and writing */
fbfd = open("/dev/fb0", O_RDWR);
if (!fbfd) {
printf("Error: cannot open framebuffer device.\n");
exit(1);
}
printf("The framebuffer device was opened successfully.\n");
/* Get fixed screen information */
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {
printf("Error reading fixed information.\n");
exit(2);
}
/* Get variable screen information */
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
printf("Error reading variable information.\n");
exit(3);
}
/* Figure out the size of the screen in bytes */
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel/8;
printf("\nScreen size is %d",screensize);
printf("\nVinfo.bpp = %d",vinfo.bits_per_pixel);
/* Map the device to memory */
fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbfd, 0);
if ((int)fbp == -1) {
printf("Error: failed to map framebuffer device to memory.\n");
exit(4);
}
printf("The framebuffer device was mapped to memory successfully.\n");
x = 100; y = 100; /* Where we are going to put the pixel */
/* Figure out where in memory to put the pixel */
location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + (y+vinfo.yoffset) * finfo.line_length;
for(count = 1 ;count < 100 ;count++)
{
*(fbp + location) = 255; /* Some blue */
*(fbp + location + count) = 0; /* A little green */
*(fbp + location + count + 1) = 0; /* A lot of red */
*(fbp + location + count + 2) = 0; /* No transparency */
}
munmap(fbp, screensize);
close(fbfd);
return 0;
}
Sau khi chạy mã trên, không có thay đổi nào được hiển thị trên màn hình nhưng 'cat/dev/fb0' hiển thị một số dữ liệu. Ai đó có thể giải thích tại sao không có gì được nhìn thấy trên màn hình? (Tôi cũng thấy rằng fb0 tương ứng với khung đệm 'inteldrmfb'.)
Cảm ơn trước,
Neeraj N.T
Bạn có thấy đèn flash màn hình một lần không? (Chụp trong bóng tối) – drahnr
Tôi sẽ thực hiện một dự đoán hoang dã và nói rằng bạn chỉ cần viết một pixel với 255/65535 cường độ màu đỏ. Đầu ra của bản in đó của Vinfo.bpp là gì? – ninjalj