2012-07-09 9 views
6

मैं सिर्फ एक पूर्ण स्क्रीन गेम बनाना चाहता हूं। मुझे पता है कि विंडोज़ पर रिज़ॉल्यूशन कैसे बदलें, लेकिन मैं लिनक्स के तहत रिज़ॉल्यूशन कैसे बदलूं? क्या इसके लिए एक क्रॉस प्लेटफार्म क्यूटी समाधान है? इसके अलावा मुझे अपने जीएलविड्ज के चारों ओर सीमाएं मिली हैं। मैं विजेट को पूरी विंडो कैसे कवर करूं?क्यूटी, ओपनजीएल, सी ++, और लिनक्स का उपयोग कर स्क्रीन रिज़ॉल्यूशन कैसे बदलें?

मैं सिर्फ कोड पोस्ट करने के लिए जा रहा हूँ:

#include <QtOpenGL> 

class GLWidget : public QGLWidget 
{ 
public: 
    void initializeGL() 
    { 
     glClearColor(0.0f, 0.0f, 1.0f, 0.0f); 
     glClearDepth(1.0f); 
    } 

    void paintGL() 
    { 
     glClear(GL_COLOR_BUFFER_BIT); 
    } 

    void resizeGL(int width, int height) 
    { 
     int side = qMin(width, height); 
     glViewport((width - side)/2, (height - side)/2, side, side); 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrtho(-0.5f, +0.5f, -0.5f, +0.5f, 4.0f, 15.0f); 
     glMatrixMode(GL_MODELVIEW); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QDesktopWidget *desktop = app.desktop(); 
    QWidget window; 
    GLWidget *glWidget = new GLWidget; 
    QHBoxLayout *mainLayout = new QHBoxLayout; 
    mainLayout->addWidget(glWidget); 
    window.setLayout(mainLayout); 
    window.setWindowTitle("Hello GL"); 
    window.resize(QSize(640, 480)); 
    window.show(); 
    window.showFullScreen(); 
    return app.exec(); 
} 
+3

एसडीएल शायद क्यूटी से खेल के लिए एक बेहतर टूलकिट है। –

+2

[xrandr] (http://www.thinkwiki.org/wiki/Xorg_RandR_1.2) पर एक नज़र डालें। – Linuxios

+0

कोई [पहले से ही यह पूछता है] (http://stackoverflow.com/questions/3372252/changing-the- स्क्रीन-resolution-from-qt)। – sashoalm

उत्तर

3

आप xrrsetscreenconfigandrate उपयोग कर सकते हैं, के रूप में समझाया here:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<unistd.h> 
#include<X11/Xlib.h> 
#include<X11/extensions/Xrandr.h> 

Display     *dpy; 
Window     root; 
int      num_sizes; 
XRRScreenSize   *xrrs; 
XRRScreenConfiguration *conf; 
short     possible_frequencies[64][64]; 
short     original_rate; 
Rotation    original_rotation; 
SizeID     original_size_id; 

int main(int argc, char *argv[]){ 
// 
//  CONNECT TO X-SERVER, GET ROOT WINDOW ID 
// 
dpy = XOpenDisplay(NULL); 
root = RootWindow(dpy, 0); 
// 
//  GET POSSIBLE SCREEN RESOLUTIONS 
// 
xrrs = XRRSizes(dpy, 0, &num_sizes); 
// 
//  LOOP THROUGH ALL POSSIBLE RESOLUTIONS, 
//  GETTING THE SELECTABLE DISPLAY FREQUENCIES 
// 
for(int i = 0; i < num_sizes; i ++) { 
     short *rates; 
     int  num_rates; 

     printf("\n\t%2i : %4i x %4i (%4imm x%4imm) ", i, xrrs[i].width, xrrs[i].height, xrrs[i].mwidth, xrrs[i].mheight); 

     rates = XRRRates(dpy, 0, i, &num_rates); 

     for(int j = 0; j < num_rates; j ++) { 
       possible_frequencies[i][j] = rates[j]; 
       printf("%4i ", rates[j]); } } 

printf("\n"); 
// 
//  GET CURRENT RESOLUTION AND FREQUENCY 
// 
conf     = XRRGetScreenInfo(dpy, root); 
original_rate   = XRRConfigCurrentRate(conf); 
original_size_id  = XRRConfigCurrentConfiguration(conf, &original_rotation); 

printf("\n\tCURRENT SIZE ID : %i\n", original_size_id); 
printf("\tCURRENT ROTATION : %i \n", original_rotation); 
printf("\tCURRENT RATE  : %i Hz\n\n", original_rate); 
// 
//  CHANGE RESOLUTION 
// 
printf("\tCHANGED TO %i x %i PIXELS, %i Hz\n\n", xrrs[1].width, xrrs[1].height, possible_frequencies[1][0]); 
XRRSetScreenConfigAndRate(dpy, conf, root, 1, RR_Rotate_0, possible_frequencies[1][0], CurrentTime); 
// 
//  SLEEP A WHILE 
// 
usleep(6000000); 
// 
//  RESTORE ORIGINAL CONFIGURATION 
// 
printf("\tRESTORING %i x %i PIXELS, %i Hz\n\n", xrrs[original_size_id].width, xrrs[original_size_id].height, original_rate); 
XRRSetScreenConfigAndRate(dpy, conf, root, original_size_id, original_rotation, original_rate, CurrentTime); 
// 
//  EXIT 
// 
XCloseDisplay(dpy); } 
// 
//  gcc -o Xrandr Xrandr.cc -lX11 -lXrandr -lstdc++ 
// 
+0

यह सबसे अच्छा समाधान प्रतीत होता है। धन्यवाद श्रीमान महोदय! – SteveDeFacto

संबंधित मुद्दे