mieki256's diary



2024/06/01() [n年前の日記]

#1 [prog] OpenGLの最大テクスチャサイズを少し調べてみた

手持ちの色々なPC/GPUで、OpenGL の最大テクスチャサイズを ―― GL_MAX_TEXTURE_SIZE の値を調べてみた。GL_MAX_TEXTURE_SIZE の値は、利用できるテクスチャの最大サイズ(横幅と縦幅)を示してる、らしい。

CPU/GPUOSGL_MAX_TEXTURE_SIZE
NVIDIA GeForce GTX 1060 6GBWindows10 x64 22H232768
AMD Athlon 5350 (Radeon R3 (GCN))Windows10 x64 22H216384
Intel i3-6100T (Intel HD Graphics 530)Ubuntu Linux 22.04 LTS16384
AMD A8-3850 (Radeon HD 6550D)Ubuntu Linux 20.04 LTS16384
AMD A6-3500 (Radeon HD 6530D)Linux Mint 21.116384
Intel i5-2500 (Intel HD Graphics 2000)Ubuntu Linux 20.04 LTS8192
Lenovo IdeaPad S10-2 (Intel Atom N270, Mobile Intel 945GSE Express)Debian Linux 11 bullseye i6862048


もっとも、今時こんな古いスペックのPCを使ってる人は少ないのではという気もする…。

調査に使ったソース :

調査に使ったC言語のソースは以下。GLFW3 を使ってる。

_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スペックとは違う値を返してきてしまった…。実機上で動かさないとダメ。

以上、1 日分です。

過去ログ表示

Prev - 2024/06 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project