Форум программистов, компьютерный форум, киберфорум
Наши страницы
8Observer8
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Активация Radeon и Geforce из EXE на ноутбуках для OpenGL 4 и C++

Запись от 8Observer8 размещена 02.06.2019 в 00:57
Обновил(-а) 8Observer8 02.06.2019 в 00:59

На ноутбуках, например, на моём Asus K53SV, установлены две видеокарты:
  • маломощная Intel (OpenGL 3.1)
  • более мощная Geforce (OpenGL 4.6)

Это сделано для экономии энергии. Почти все приложения запускаются с маломощной, а игры запускаются с Geforce. Если вы хотите, чтобы EXE запускалось с OpenGL 4.6, то можно, например, в main.cpp, в начале файла, после include'ов добавить:
C++
1
2
3
4
5
// For Notebooks
// Enable running with High-performance NVIDIA Geforce processor
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
// Enable running with High-performance AMD Radeon processor
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
Они принудительно запускают более мощную карту на NVIDIA Geforce и на AMD Radeon. Скачайте проект и запустите в Visual Studio: Пример написан в 2015, но вы можете выставить в настройках проекта (General->Platform Toolset) другую версию Visual Studio.

Проект создаёт пустое окно с помощью GLFW и выводит в консоль производителя и номер версии OpenGL:
C++
1
2
    std::cout << glGetString(GL_VENDOR) << std::endl;
    std::cout << glGetString(GL_VERSION) << std::endl;
Например, у меня вывелось:
Цитата:
NVIDIA Corporation
4.6.0 NVIDIA 388.73
Если закомментировать эти строки:
C++
1
2
3
4
//// Enable running with High-performance NVIDIA Geforce processor
//extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
//// Enable running with High-performance AMD Radeon processor
//extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
Выводит:
Цитата:
Intel
3.1.0 - Build 9.17.10.4459
Полный код:

main.cpp

C++
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <glad/glad.h>
#include <GLFW/glfw3.h>
 
#include <iostream>
 
// For Notebooks
// Enable running with High-performance NVIDIA Geforce processor
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
// Enable running with High-performance AMD Radeon processor
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
 
// Create a window with GLFW library
int main()
{
    // Initialization
    glfwInit();                     // Initialize the GLFW library
                                    // Create a window
    GLFWwindow *window = glfwCreateWindow(256, 256, "Empty Window", nullptr, nullptr);
    glfwMakeContextCurrent(window); // Create OpenGL context for drawing
    gladLoadGL();                   // Initialize the GLAD library
 
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // Set a color for clearing a canvas
 
    std::cout << glGetString(GL_VENDOR) << std::endl;
    std::cout << glGetString(GL_VERSION) << std::endl;
 
    // Main Loop of Application
    // Should the window be closed?
    while (!glfwWindowShouldClose(window))
    {
        // Check if any events have been activated
        // (key pressed, mouse moved etc.) and call
        // corresponding response functions
        glfwPollEvents();
 
        glClear(GL_COLOR_BUFFER_BIT);   // Clear canvas with previously specified color
        glfwSwapBuffers(window);        // Swap the front and back buffers when rendering
    }
 
    // Clean up resources
    // Clean up GLFW Library Resources
    glfwTerminate();
 
    return 0;
}
Размещено в Без категории
Просмотров 114 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru