2024/06/01(土) [n年前の日記]
#1 [prog] OpenGLの最大テクスチャサイズを少し調べてみた
手持ちの色々なPC/GPUで、OpenGL の最大テクスチャサイズを ―― GL_MAX_TEXTURE_SIZE の値を調べてみた。GL_MAX_TEXTURE_SIZE の値は、利用できるテクスチャの最大サイズ(横幅と縦幅)を示してる、らしい。
もっとも、今時こんな古いスペックのPCを使ってる人は少ないのではという気もする…。
| CPU/GPU | OS | GL_MAX_TEXTURE_SIZE |
|---|---|---|
| NVIDIA GeForce GTX 1060 6GB | Windows10 x64 22H2 | 32768 |
| AMD Athlon 5350 (Radeon R3 (GCN)) | Windows10 x64 22H2 | 16384 |
| Intel i3-6100T (Intel HD Graphics 530) | Ubuntu Linux 22.04 LTS | 16384 |
| AMD A8-3850 (Radeon HD 6550D) | Ubuntu Linux 20.04 LTS | 16384 |
| AMD A6-3500 (Radeon HD 6530D) | Linux Mint 21.1 | 16384 |
| Intel i5-2500 (Intel HD Graphics 2000) | Ubuntu Linux 20.04 LTS | 8192 |
| Lenovo IdeaPad S10-2 (Intel Atom N270, Mobile Intel 945GSE Express) | Debian Linux 11 bullseye i686 | 2048 |
- Intel i5-2500というかなり古い世代ですら 8192 x 8192 までテクスチャを使えるらしい。ありがたい。
- Intel Atom N270時代のスペックだと 2048x2048 まで。さすがにコレは厳しい。
もっとも、今時こんな古いスペックのPCを使ってる人は少ないのではという気もする…。
◎ 調査に使ったソース :
調査に使ったC言語のソースは以下。GLFW3 を使ってる。
_get_max_texsize.c
Makefile は以下。GNU Make + gcc 用。
_Makefile
以下のバージョンでビルドできることを確認した。
以下でビルド。get_max_texsize.exe か get_max_texsize が生成される。
以下で実行。
実行するとウインドウが開くので、そのまま閉じる。log.txt というテキストファイルに、以下のような結果が出力される。
注意点。Linxu機の場合、実機のデスクトップ上で仮想端末を開いて実行しないと正確な値が得られない。当初面倒臭がって、Windows10 x64 22H2 + MobaXterm からLinux機にsshでアクセスして ./get_max_texsize を実行したら、MobaXtermが持ってるXサーバで実行することになってしまったようで、アクセス先のPCスペックとは違う値を返してきてしまった…。実機上で動かさないとダメ。
_get_max_texsize.c
#include <stdlib.h>
#include <stdio.h>
#include <GL/gl.h>
#include <GLFW/glfw3.h>
#define SCRW 512
#define SCRH 288
#define TITLE "Max texture size"
int main(void)
{
if (!glfwInit())
{
fprintf(stderr, "Failed to initialize GLFW\n");
exit(EXIT_FAILURE);
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1); // set OpenGL 1.1
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
GLFWwindow *window = glfwCreateWindow(SCRW, SCRH, TITLE, NULL, NULL);
if (!window)
{
fprintf(stderr, "Failed to open GLFW window\n");
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
// get max texture size
GLint maxTextureSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
printf("Max Texture Size (width/height): %d\n", maxTextureSize);
// save max texture size to log.txt
FILE *fp;
fp = fopen("log.txt", "w");
if (fp != NULL)
{
fprintf(fp, "Max Texture Size (width/height): %d\n", maxTextureSize);
fclose(fp);
}
// main loop
while (!glfwWindowShouldClose(window))
{
// render
glClearColor(0.2, 0.4, 0.8, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
Makefile は以下。GNU Make + gcc 用。
_Makefile
SRCS = get_max_texsize.c
ifeq ($(OS),Windows_NT)
# Windows
TARGET = get_max_texsize.exe
GCC_VERSION=$(shell gcc -dumpversion)
ifeq ($(GCC_VERSION),6.3.0)
# MinGW gcc 6.3.0
LIBS = -static -lopengl32 -lglu32 -lwinmm -lgdi32 -lglfw3dll -mwindows
else
# MinGW gcc 9.2.0, MSYS2
LIBS = -static -lopengl32 -lglu32 -lwinmm -lgdi32 -lglfw3 -mwindows
endif
else
# Linux (Ubuntu Linux 22.04 LTS, gcc 11.4.0)
TARGET = get_max_texsize
LIBS = -lGL -lGLU -lglfw -lm
endif
all: $(TARGET)
$(TARGET): $(SRCS) Makefile
gcc $< -o $@ $(LIBS)
.PHONY: clean
clean:
rm -f $(TARGET) *.o
以下のバージョンでビルドできることを確認した。
- MinGW gcc 6.3.0 + GNU Make 3.81
- MSYS2 gcc 14.1.0 + GNU Make 4.4.1
- Linux gcc 9.4.0 + GNU Make 4.2.1
以下でビルド。get_max_texsize.exe か get_max_texsize が生成される。
make clean make
以下で実行。
# Windows get_max_texsize.exe # Linux ./get_max_texsize
実行するとウインドウが開くので、そのまま閉じる。log.txt というテキストファイルに、以下のような結果が出力される。
Max Texture Size (width/height): 32768
注意点。Linxu機の場合、実機のデスクトップ上で仮想端末を開いて実行しないと正確な値が得られない。当初面倒臭がって、Windows10 x64 22H2 + MobaXterm からLinux機にsshでアクセスして ./get_max_texsize を実行したら、MobaXtermが持ってるXサーバで実行することになってしまったようで、アクセス先のPCスペックとは違う値を返してきてしまった…。実機上で動かさないとダメ。
[ ツッコむ ]
以上です。