مشكلة مع SDL_DisplayFormatAlpha (ج ++)
-
19-08-2019 - |
سؤال
Surface::Surface( tfilename file ) {
// initialize the surface data member to the image indicated by filename
SDL_Surface *tempSurface;
tempSurface = IMG_Load( file.c_str() );
if ( !tempSurface ) {
surface = NULL;
exit(1);
}
else {
surface = SDL_DisplayFormatAlpha( tempSurface );
//surface = tempSurface;
}
SDL_FreeSurface( tempSurface );
}
وهذا يجمع ما يرام، ولكن عندما تشغيله أحصل على خطأ الإنقسام. الخطأ التي أبلغ عنها جدب:
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0xb79c16c0 (LWP 8089)] 0xb7e8b9a3 in SDL_DisplayFormatAlpha () from /usr/lib/libSDL-1.2.so.0
وتتبع المكدس هو كما يلي:
#0 0xb7e8b9a3 in SDL_DisplayFormatAlpha () from /usr/lib/libSDL-1.2.so.0 #1 0x0804987e in Surface (this=0x804d060, file=@0xbfb20760) at Surface.cpp:16 #2 0x0804a159 in Image (this=0x804d038, x=0, y=0, file=@0xbfb207a0) at Image.cpp:16 #3 0x0804a3de in Object (this=0x804d028, imageFile=@0xbfb207dc) at Object.cpp:4 #4 0x080491cb in Application (this=0xbfb20810) at Application.cpp:8 #5 0x08048e0d in main () at main.cpp:5
إذا كنت التعليق خارج surface = SDL_DisplayFormatAlpha( tempSurface );
وSDL_FreeSurface( tempSurface );
وsurface = tempSurface;
غير تعليق مثل ذلك:
Surface::Surface( tfilename file ) {
// initialize the surface data member to the image indicated by filename
SDL_Surface *tempSurface;
tempSurface = IMG_Load( file.c_str() );
if ( !tempSurface ) {
surface = NULL;
exit(1);
}
else {
//surface = SDL_DisplayFormatAlpha( tempSurface );
surface = tempSurface;
}
//SDL_FreeSurface( tempSurface );
}
وبعد ذلك يبدو أن تعمل على ما يرام. يمكن لأحد أن يقول لي ما الذي يحدث؟ في الواقع، يبدو أن الشفافية في العمل، وأيضا عندما كنت التعليق خارج SDL_DisplayFormatAlpha. غير أن وظيفة يعني فقط ليتم استخدامها مع الصور التي لم يكن لديك قناة ألفا؟
المحلول
وIMG_Load يجب التعامل بالشفافية وPNG تلقائيا، كما في نهاية الملاحظات مشاركتك. ما عدا / الخطأ الفعلي التي القيت؟ كومة التتبع الخاص بك لا تظهر ذلك.
نصائح أخرى
إذا كنت تقرأ الرابط هنا (وظيفة ذات الصلة):
و"يجب أن ندعو SDL_Init قبل استخدام وظيفة SDL_DisplayFormat. إذا لم تقم بذلك، سوف برنامجك تحطم مع حدوث انتهاك وصول".
ويمكن أن تكون مشكلتك؟