سؤال

وأنا باستخدام ديف-C ++ 4.9.9.2 (لا تسأل لماذا) وSDL 1.2.8.

التالي لقد خلق مشروع جديد: SDL وGL. ويتضمن هذا المشروع بالفعل بعض التعليمات البرمجية:

#include <SDL/SDL.h>
#include <gl/gl.h>

int main(int argc, char *argv[]){
    SDL_Event event;
    float theta = 0.0f;

    SDL_Init(SDL_INIT_VIDEO);
    SDL_SetVideoMode(600, 300, 0, SDL_OPENGL | SDL_HWSURFACE | SDL_NOFRAME);

    glViewport(0, 0, 600, 300);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0);
    glDepthFunc(GL_LESS);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glMatrixMode(GL_PROJECTION);
    glMatrixMode(GL_MODELVIEW);

    int done;
    for(done = 0; !done;){
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glLoadIdentity();
        glTranslatef(0.0f,0.0f,0.0f);
        glRotatef(theta, 0.0f, 0.0f, 1.0f);

        glBegin(GL_TRIANGLES);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(0.0f, 1.0f);
        glColor3f(0.0f, 1.0f, 0.0f);
        glVertex2f(0.87f, -0.5f);
        glColor3f(0.0f, 0.0f, 1.0f);
        glVertex2f(-0.87f, -0.5f);
        glEnd();

        theta += .5f;
        SDL_GL_SwapBuffers();
        SDL_PollEvent(&event);
        if(event.key.keysym.sym == SDLK_ESCAPE)
            done = 1;
    }
    SDL_Quit();
    return(0);
}

التالي أنا جمعت المشروع ومحاولة لتشغيله. بعد تشغيل البرنامج يظهر لأقل من 1 ثانية وينهي على الفور. عودة المصحح الخطأ التالية: "انتهاك وصول (خطأ الإنقسام) التي أثيرت في البرنامج"

وأنا باستخدام ويندوز 2003 وراديون X1950 PRO مع أحدث برامج التشغيل.

ولقد اختبرت البرنامج على كمبيوتر محمول مع ويندوز XP وأنها تعمل تماما. لماذا لا يعمل هذا البرنامج على جهاز الكمبيوتر الخاص بي؟

هل كانت مفيدة؟

المحلول 3

وأخيرا وجدت بعض الوقت لحل هذه المشكلة. لقد إلغاء كلي البطاقة القديمة السائقين الرسم وتثبيت 9.8 السائقين ATI مع محفز مركز التحكم. الآن كل شيء يعمل.

وهناك حيث لا مشكلة في القانون نفسه. كانت المشكلة شيئا في نظام بلدي مع السائقين الرسم. على أي حال شكرا لإجاباتك!

نصائح أخرى

وكان يعمل للغاية بالنسبة لي. فما استقاموا لكم فاستقيموا حاول إزالة SDL_HWSURFACE وإضافة SDL_DOUBLEBUF من استدعاء النافذة.

SDL_SetVideoMode(600, 300, 0, SDL_OPENGL | SDL_NOFRAME | SDL_DOUBLEBUF);

وحين (! فعلت) تبدو أجمل وأسهل للقراءة. نظرا لأنه الموسومة ب C ++، لماذا لا تستخدم bools لهذا؟

bool done = false;
while(!done){

وترغب أيضا في حين (SDL_PollEvent (والحدث))، كما يمكن أن يكون هناك أكثر من حدث في الإطار.

while(SDL_PollEvent(&event))
{
    switch(event.type)
        case SDL_KEYDOWN:
            if(event.key.keysym.sym == SDLK_ESCAPE)
                done = true;
}

وتخميني هو أنها تسقط على SDL_PollEvent (). تقوم بإرجاع 1 / صحيح إذا كان هناك حدث، 0 / خطأ إن لم يكن. عندما لا يعود صحيحا، فإنه سيكون نوع معين من SDL_Event على أساس event.type. SDL_Event هو اتحاد جميع الأحداث SDL وبعض المعلومات في حدث واحد لا يضمن أن تكون بالترتيب نفسه، نوع، الخ كما آخر. لذلك، أنت فقط تحتاج إلى التحقق من نوع الحدث والتعامل معها عند الضرورة .. راجع في مستندات للحصول على مزيد من المعلومات بطبيعة الحال. شيء من هذا القبيل:

if (SDL_PollEvent(&event)) {
  switch (event.type) {
    case SDL_KEYUP:
      if (event.key.keysym.sym == SDLK_ESCAPE)
        done = 1;
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top