2010-02-02 33 views
1

我使用該函數從圖形卡, 得到我的紋理,但由於某種原因,它不就有些卡返回任何東西,如果的miplevel> 0glGetTexImage()在ATI卡上無法正常工作?當的miplevel> 0

下面是一個使用獲得圖像的代碼IM失敗:

glGetTexImage(GL_TEXTURE_2D, miplevel, GL_RGB, GL_UNSIGNED_BYTE, data); 

這裏是我使用的檢查,使用紋理映射,其方法的代碼:

ext = (char*)glGetString(GL_EXTENSIONS); 

if(strstr(ext, "SGIS_generate_mipmap") == NULL){ 
// use gluBuild2DMipmaps() 
}else{ 
// use GL_GENERATE_MIPMAP 
} 

目前已正常工作,所以它說GL_GENERATE_MIPMAP支持那些ATI顯卡下面。

下面是測試卡:

  1. 的ATI Radeon 9550/X1050系列
  2. 的ATI Mobility Radeon HD 3470
  3. ATI的Radeon X700
  4. 的ATI Radeon HD 4870
  5. 的ATI Radeon HD 3450

在這一刻我正在採取miplevel 0並通過自己的代碼生成mipmap。有沒有更好的解決這個問題?

此外glGetError()返回0爲所有卡,所以沒有發生錯誤。它只是沒有用。可能是驅動程序問題?

我還在尋找更好的修復比調整它自己的CPU ...

+0

glGetError()是否返回有用的東西? 「老牌」究竟是什麼意思?在1998年前後,曾經有不完整的OpenGL實現(例如Matrox G200 OpenGL MCD),但是如果你沒有告訴我們更多關於它們的信息(包括驅動程序和操作系統版本),這很難說是否適用於你的顯卡。 – 2010-02-03 00:16:58

+0

編輯我的帖子。 – Newbie 2010-02-03 16:13:53

+0

你是如何生成你的mipmap? gluBuild2DMipmaps()或glTexParameteri(...,GL_GENERATE_MIPMAP,...)? – genpfault 2010-02-03 17:18:02

回答

1

檢查錯誤glGetTexImage的報告。它很可能會告訴你錯誤是什麼。

編輯:聽起來像使用ATI寫得不好的OpenGL驅動程序的樂趣。假設你的驅動程序是最新的,使用nVidia卡,解決它或接受它將無法正常工作。這幾乎是你唯一的選擇。對ATI來說可能值得討論,但它們很可能什麼都不做,唉。

編輯2:在問題卡上你使用GL_GENERATE_MIPMAP嗎?這可能是因爲除非明確建立......否則你無法獲得mip級別......?即嘗試gluBuild2DMipmaps()的一切。

編輯3:雖然是。它「可能」是你問題的原因。我認爲ATI卡從本地副本抓取紋理不太可能,但是如果您使用自動生成的mip貼圖,那麼它會完全在卡上進行,而不會將其複製回來。明確地嘗試在本地構建mip地圖,看看是否可以解決您的問題。它可能不會,但是你確實需要嘗試這些事情,否則你將永遠無法解決問題。唉試驗和錯誤都是這樣的問題。這就是爲什麼少數幾款遊戲都有大型的數據庫,包括驅動程序名稱,卡片名稱和驅動程序版本,以決定功能是否可用。

+2

答案不是要求澄清,那是什麼意見。 – 2010-02-02 22:49:46

+1

重新表達:P – Goz 2010-02-03 08:02:10

+0

檢查我的編輯。 – Newbie 2010-02-03 16:16:49