2011-10-12 31 views
7

Trong những ngày cũ, tôi sẽ tạo một TForm, đặt TMyPanel lên đó (với thông điệp WM_PAINT đã được ghi đè) và truyền Xử lý của nó tới một loạt các hàm WGL tìm một pixelformat tương thích và tạo ngữ cảnh dựng hình. Cũng giống như hướng dẫn NeHe đã làm nó.Cách thiết lập môi trường OpenGL1.4 trong Ứng dụng Firemonkey?

Hiện có ứng dụng FireMonkey. Làm thế nào để có được bối cảnh rendering OpenGL 1.4 có đang làm việc trên Win và iOS?

EDIT: Đã cố gắng làm cho nó hoạt động bằng cách chuyển TForm.Handle (là NativeUInt). Tin tốt - không có lỗi từ kết thúc OpenGL, nhưng tin xấu - không có đầu ra trên TForm hoặc .. Tôi rõ ràng là thiếu một số phần quan trọng ở đây, không ai có OpenGL làm việc trong ứng dụng FireMonkey?

Trả lời

2

Sau một số điều tra, tôi đã quản lý để tạo ngữ cảnh OpenGL trong FireMonkey trên nền tảng Windows. Tôi chưa có quyền truy cập vào iOS, nhưng tôi chắc rằng có thể thực hiện điều gì đó ở đó.

Để giải pháp: thêm mệnh đề FMX.Platform.Win đến uses (có thể cần phải bọc nó vào IFDEF cho iOS). Bây giờ chúng ta có thể sử dụng FmxHandleToHWND(Form1.Handle) để có được hợp lệ HWND. Đó là nó. Trên MacOS, thực hiện tương tự bằng cách thêm FMX.Platform.Win và thông qua cuộc gọi H_WND := FmxHandleToObjC(AHandle);.

2

Firemonkey cung cấp lớp trừu tượng.

Vì vậy, trên Windows, bạn sử dụng DirectX và OSX và iOS khi sử dụng OpenGL/Quartz. Trên cửa sổ, mọi thứ có thể rơi trở lại GDI +

Vì điều này phải tính đến điểm đến hiển thị có thể không phải lúc nào cũng là OpenGL và không phải lúc nào cũng giống nhau trên cùng một nền tảng.

TCanvas trong một phần của lớp trừu tượng này.

Có 3 cách triển khai hiện tại là TCanvas, ứng dụng của bạn có thể đang sử dụng bất kỳ ứng dụng nào trong số này.

  • FMX.Canvas.D2D.pas - Direct2D
  • FMX.Canvas.GDIP.pas - GDI +
  • FMX.Canvas.Mac.pas - Mac

Các chi tiết thực hiện nền tảng thường được giấu trong phần tin là không thể truy cập.

Bạn cũng có TPlatform trong FMX.Platform.pas để ẩn chi tiết triển khai và xuất bản một API (giới hạn phạm vi) được thiết kế để hoạt động trên tất cả các nền tảng.

Nếu bạn sử dụng FMX.Platform.Win.pas bạn có thể nhận được các cửa sổ xử lý cho một trao TFmxHandle

Nếu bạn sử dụng FMX.Platform.Mac.pas bạn có thể lấy IObjectiveC cho một trao TFmxHandle

Tuy nhiên trên IOS không có chức năng tương đương trong FMX_Platform_iOS.pas

+0

Câu trả lời của bạn là tốt, nhưng nó không cho phép tôi đạt được mục tiêu của mình. Có vẻ như có gì đó sai với TfmxHandle đó. – Kromster

Các vấn đề liên quan