Tại sao các nhà phát triển trò chơi thích Windows?


396

Có phải DirectX dễ hơn hay tốt hơn OpenGL, ngay cả khi OpenGL là nền tảng chéo? Tại sao chúng ta không thấy các trò chơi mạnh mẽ thực sự cho Linux như có cho Windows?


55
Tiền đề sai - đâu là bằng chứng cho thấy các nhà phát triển trò chơi thích windows? Tôi nghĩ rằng @ user17674 đã có nó chính xác hơn - họ muốn phát triển cho các nền tảng để họ có thể bán nhiều hơn và kiếm được nhiều tiền hơn :-)
Rory Alsop

258
Các nhà phát triển virus cũng thích Windows. Đó là tất cả về cơ sở người dùng.
CesarGon

4
Tại sao các lập trình viên Windows thích DirectX hơn OpenGL có lẽ là một câu hỏi thú vị hơn trong lịch sử. Như liên kết đến cuộc phỏng vấn của Carmack dưới đây có thể chỉ ra, DX đã từng bị ghê tởm. Thật thú vị khi biết làm thế nào nó giữ đủ người dùng cho MS để hỗ trợ nó cho đến khi Xbox và các bản viết lại hiện đại làm cho nó trở nên phổ biến hơn. Hoặc có lẽ nó chỉ luôn luôn đủ tốt để mọi người mắc kẹt với nó.
CodexArcanum

100
Tại sao người ta cướp ngân hàng? Bởi vì đó là nơi có tiền .
GrandmasterB

7
@CesarGon: Không chỉ vì cơ sở người dùng mà còn vì sự dễ dàng phát triển.
Giorgio

Câu trả lời:


1154

Nhiều câu trả lời ở đây thực sự, thực sự tốt. Nhưng vấn đề OpenGLDirect3D (D3D) có lẽ nên được giải quyết. Và điều đó đòi hỏi ... một bài học lịch sử.

Và trước khi chúng tôi bắt đầu, tôi biết nhiều về OpenGL hơn là về Direct3D . Tôi chưa bao giờ viết một dòng mã D3D nào trong đời và tôi đã viết hướng dẫn về OpenGL. Vì vậy, những gì tôi sắp nói không phải là một câu hỏi thiên vị. Nó chỉ đơn giản là một vấn đề của lịch sử.

Sự ra đời của Xung đột

Một ngày nọ, vào đầu những năm 90, Microsoft nhìn quanh. Họ thấy SNESSega Genesis thật tuyệt vời, chạy rất nhiều game hành động và như vậy. Và họ đã thấy DOS . Các nhà phát triển mã hóa các trò chơi DOS như trò chơi console: trực tiếp với kim loại. Tuy nhiên, không giống như các máy chơi game, nơi một nhà phát triển tạo ra trò chơi SNES biết người dùng sẽ có phần cứng nào, các nhà phát triển DOS phải viết cho nhiều cấu hình có thể. Và điều này là khá khó khăn hơn nó có vẻ.

Và Microsoft đã có một vấn đề lớn hơn: Windows. Hãy xem, Windows muốn sở hữu phần cứng, không giống như DOS, điều này cho phép các nhà phát triển làm bất cứ điều gì. Việc sở hữu phần cứng là cần thiết để có sự hợp tác giữa các ứng dụng. Hợp tác là chính xác những gì các nhà phát triển trò chơi ghét vì nó chiếm tài nguyên phần cứng quý giá mà họ có thể đang sử dụng để trở nên tuyệt vời.

Để thúc đẩy phát triển trò chơi trên Windows, Microsoft cần một API thống nhất ở mức độ thấp, chạy trên Windows mà không bị làm chậm bởi nó và hầu hết tất cả các phần cứng chéo . Một API duy nhất cho tất cả đồ họa, âm thanh và phần cứng đầu vào.

Do đó, DirectX đã ra đời.

Máy gia tốc 3D đã ra đời một vài tháng sau đó. Và Microsoft gặp phải một rắc rối. Xem, DirectDraw, thành phần đồ họa của DirectX, chỉ xử lý đồ họa 2D: phân bổ bộ nhớ đồ họa và thực hiện các bit-bit giữa các phần bộ nhớ được phân bổ khác nhau.

Vì vậy, Microsoft đã mua một chút phần mềm trung gian và đưa nó vào Direct3D Phiên bản 3. Nó đã bị hủy bỏ trên toàn cầu . Và với lý do chính đáng; nhìn vào mã D3D v3 giống như nhìn chằm chằm vào Ark of the Covenant.

John Carmack cũ tại Id Software đã nhìn vào thùng rác đó và nói, "Bắt vít đi!" và quyết định viết cho một API khác: OpenGL.

Hãy xem, một phần khác của quái thú nhiều người là Microsoft đã bận rộn làm việc với SGI trong việc triển khai OpenGL cho Windows. Ý tưởng ở đây là tòa án các nhà phát triển ứng dụng GL điển hình: ứng dụng máy trạm. Công cụ CAD, mô hình hóa, loại đó. Trò chơi là thứ xa nhất trong tâm trí họ. Đây chủ yếu là một thứ Windows NT, nhưng Microsoft cũng quyết định thêm nó vào Win95.

Như một cách để lôi kéo các nhà phát triển máy trạm vào Windows, Microsoft đã quyết định mua chuộc họ bằng quyền truy cập vào các card đồ họa 3D mới lạ này. Microsoft đã triển khai giao thức Trình điều khiển máy khách có thể cài đặt: nhà sản xuất card đồ họa có thể ghi đè lên phần mềm OpenGL của Microsoft bằng phần mềm dựa trên phần cứng. Mã có thể tự động chỉ cần sử dụng triển khai OpenGL phần cứng nếu có sẵn.

Trong những ngày đầu, các băng video cấp độ người tiêu dùng không có hỗ trợ cho OpenGL. Điều đó đã không ngăn cản Carmack chỉ chuyển Quake sang OpenGL (GLQuake) trên máy trạm SGI của mình. Như chúng ta có thể đọc từ readme GLQuake:

Về mặt lý thuyết, glquake sẽ chạy trên bất kỳ OpenGL tuân thủ nào hỗ trợ các phần mở rộng đối tượng kết cấu, nhưng trừ khi nó là phần cứng rất mạnh giúp tăng tốc mọi thứ cần thiết, chơi trò chơi sẽ không được chấp nhận. Nếu nó phải đi qua bất kỳ đường dẫn mô phỏng phần mềm nào, hiệu suất có thể sẽ chỉ dưới một khung hình mỗi giây.

Vào thời điểm này (tháng ba năm 97), phần cứng opengl tiêu chuẩn duy nhất có thể chơi glquake một cách hợp lý là một thực thể giữa các bản đồ, đó là một thẻ RẤT đắt tiền. 3dlabs đã được cải thiện đáng kể hiệu suất của họ, nhưng với các trình điều khiển có sẵn, nó vẫn không đủ tốt để chơi. Một số trình điều khiển 3dlabs hiện tại cho bảng glint và permedia cũng có thể gặp sự cố NT khi thoát khỏi chế độ chạy toàn màn hình, vì vậy tôi không khuyên bạn nên chạy glquake trên phần cứng 3dlabs.

3dfx đã cung cấp một opengl32.dll thực hiện mọi thứ cần thiết, nhưng nó không phải là một triển khai opengl đầy đủ. Các ứng dụng opengl khác rất khó có thể hoạt động với nó, vì vậy hãy xem xét về cơ bản nó là một trình điều khiển gây chấn động trên YouTube.

Đây là sự ra đời của trình điều khiển miniGL. Cuối cùng, chúng đã phát triển thành các triển khai OpenGL đầy đủ, vì phần cứng đã trở nên đủ mạnh để thực hiện hầu hết các chức năng OpenGL trong phần cứng. nVidia là người đầu tiên cung cấp triển khai OpenGL đầy đủ. Nhiều nhà cung cấp khác vật lộn, đó là một lý do tại sao các nhà phát triển ưa thích Direct3D: họ tương thích trên một phạm vi phần cứng rộng hơn. Cuối cùng, chỉ còn nVidia và ATI (nay là AMD) và cả hai đều có triển khai OpenGL tốt.

OpenGL lên ngôi

Do đó, giai đoạn được đặt: Direct3D so với OpenGL. Đây thực sự là một câu chuyện tuyệt vời, xem xét D3D v3 tệ đến mức nào.

Hội đồng Đánh giá Kiến trúc OpenGL (ARB) là tổ chức chịu trách nhiệm duy trì OpenGL. Họ phát hành một số tiện ích mở rộng, duy trì kho lưu trữ tiện ích mở rộng và tạo các phiên bản mới của API. ARB là một ủy ban gồm nhiều người chơi trong ngành đồ họa, cũng như một số nhà sản xuất hệ điều hành. Apple và Microsoft tại nhiều thời điểm là thành viên của ARB.

3Dfx ra mắt cùng với Voodoo2. Đây là phần cứng đầu tiên có thể thực hiện đa nhiệm, đây là điều mà OpenGL không thể làm trước đây. Trong khi 3Dfx mạnh mẽ chống lại OpenGL, NVIDIA, nhà sản xuất chip đồ họa đa biến tiếp theo (TNT1), lại yêu thích nó. Vì vậy, ARB đã ban hành một phần mở rộng: GL_ARB_multitexture, cho phép truy cập vào đa văn bản.

Trong khi đó, Direct3D v5 ra mắt. Bây giờ, D3D đã trở thành một API thực tế , thay vì một thứ mà một con mèo có thể nôn ra. Vấn đề? Không đa biến.

Úi.

Bây giờ, người ta sẽ không bị tổn thương nhiều như nó nên có, bởi vì mọi người đã không sử dụng đa phương tiện nhiều. Không trực tiếp. Hiệu suất đa điểm bị tổn thương khá nhiều, và trong nhiều trường hợp, nó không xứng đáng so với đa truyền. Và tất nhiên, các nhà phát triển trò chơi thích đảm bảo rằng các trò chơi của họ hoạt động trên phần cứng cũ hơn, không có nhiều tính năng, vì vậy nhiều trò chơi được vận chuyển mà không có nó.

Do đó, D3D đã được đưa ra.

Thời gian trôi qua và NVIDIA triển khai GeForce 256 (không phải GeForce GT-250; GeForce đầu tiên), cuộc cạnh tranh kết thúc khá nhiều về card đồ họa trong hai năm tới. Điểm bán hàng chính là khả năng biến đổi đỉnh và chiếu sáng (T & L) trong phần cứng. Không chỉ vậy, NVIDIA còn yêu thích OpenGL đến nỗi công cụ T & L của họ thực sự OpenGL. Gần như theo nghĩa đen; theo tôi hiểu, một số thanh ghi của họ thực sự lấy các liệt kê OpenGL trực tiếp làm giá trị.

Direct3D v6 ra đời. Đa điểm cuối cùng nhưng ... không có phần cứng T & L. OpenGL luôn có một đường ống T & L, mặc dù trước 256 nó đã được triển khai trong phần mềm. Vì vậy, NVIDIA đã rất dễ dàng chuyển đổi việc triển khai phần mềm của họ thành một giải pháp phần cứng. Nó sẽ không tồn tại cho đến D3D v7 cho đến khi D3D cuối cùng có hỗ trợ T & L phần cứng.

Bình minh của Shader, Twilight của OpenGL

Sau đó, GeForce 3 xuất hiện. Và rất nhiều điều đã xảy ra cùng một lúc.

Microsoft đã quyết định rằng họ sẽ không bị trễ nữa. Vì vậy, thay vì nhìn vào những gì NVIDIA đang làm và sau đó sao chép nó sau khi thực tế, họ đã có một vị trí đáng kinh ngạc là đến gặp họ và nói chuyện với họ. Và rồi họ yêu nhau và có một bàn điều khiển nhỏ cùng nhau.

Một cuộc ly hôn lộn xộn xảy ra sau đó. Nhưng đó là cho một thời điểm khác.

Điều này có ý nghĩa gì với PC là GeForce 3 xuất hiện đồng thời với D3D v8. Và không khó để thấy GeForce 3 ảnh hưởng đến các shader của D3D 8 như thế nào. Các shader pixel của Shader Model 1.0 cực kỳ đặc trưng cho phần cứng của NVIDIA. Không có nỗ lực nào trong việc trừu tượng hóa phần cứng của NVIDIA; SM 1.0 là bất cứ điều gì GeForce 3 đã làm.

Khi ATI bắt đầu nhảy vào cuộc đua card đồ họa hiệu năng với Radeon 8500, đã có một vấn đề. Đường ống xử lý pixel của 8500 mạnh hơn công cụ của NVIDIA. Vì vậy, Microsoft đã phát hành Shader Model 1.1, về cơ bản là "Dù 8500 có làm gì đi nữa".

Điều đó có vẻ như là một thất bại về phía D3D. Nhưng thất bại và thành công là vấn đề bằng cấp. Và thất bại sử thi đã xảy ra ở vùng đất OpenGL.

NVIDIA yêu thích OpenGL, vì vậy khi GeForce 3 ra mắt, họ đã phát hành một loạt các phần mở rộng OpenGL. Tiện ích mở rộng OpenGL độc quyền : Chỉ dành cho NVIDIA. Đương nhiên, khi 8500 xuất hiện, nó không thể sử dụng bất kỳ cái nào trong số chúng.

Xem, ít nhất là trong vùng đất D3D 8, bạn có thể chạy các trình tạo bóng SM 1.0 trên phần cứng ATI. Chắc chắn, bạn đã phải viết các shader mới để tận dụng sự mát mẻ của 8500, nhưng ít nhất mã của bạn đã hoạt động .

Để có các shader thuộc bất kỳ loại nào trên Radeon 8500 trong OpenGL, ATI đã phải viết một số phần mở rộng OpenGL. Tiện ích mở rộng OpenGL độc quyền : chỉ ATI. Vì vậy, bạn cần một bộ mã NVIDIA và một bộ mã ATI, chỉ để có các shader .

Bây giờ, bạn có thể hỏi, "OpenGL ARB, công việc của ai là giữ cho OpenGL hiện tại?" Trường hợp nhiều ủy ban thường kết thúc: tắt là ngu ngốc.

Xem, tôi đã đề cập đến ARB_multitexture ở trên vì nó ảnh hưởng sâu sắc đến tất cả những điều này. ARB dường như (từ quan điểm của người ngoài cuộc) muốn tránh hoàn toàn ý tưởng về các shader. Họ hình dung rằng nếu họ tát đủ cấu hình vào đường ống chức năng cố định, họ có thể bằng khả năng của đường ống đổ bóng.

Vì vậy, ARB phát hành mở rộng sau khi mở rộng. Mỗi phần mở rộng có dòng chữ "texture_env" trong đó là một nỗ lực khác để vá thiết kế cũ này. Kiểm tra sổ đăng ký: giữa các tiện ích mở rộng ARB và EXT, có tám tiện ích mở rộng được thực hiện. Nhiều người đã được thăng cấp lên các phiên bản lõi OpenGL.

Microsoft là một phần của ARB tại thời điểm này; họ rời đi trong khoảng thời gian D3D 9 đạt được. Vì vậy, hoàn toàn có khả năng họ đã làm việc để phá hoại OpenGL theo một cách nào đó. Cá nhân tôi nghi ngờ lý thuyết này vì hai lý do. Một, họ sẽ phải nhận được sự giúp đỡ từ các thành viên ARB khác để làm điều đó, vì mỗi thành viên chỉ được một phiếu bầu. Và quan trọng nhất là hai, ARB đã không cần sự giúp đỡ của Microsoft để giải quyết mọi thứ. Chúng ta sẽ thấy thêm bằng chứng về điều đó.

Cuối cùng, ARB, có khả năng bị đe dọa từ cả ATI và NVIDIA (cả hai thành viên tích cực) cuối cùng đã rút đầu ra đủ lâu để cung cấp các shader theo kiểu lắp ráp thực tế.

Muốn một cái gì đó thậm chí ngu ngốc?

Phần cứng T & L. Một cái gì đó OpenGL đã có đầu tiên . Chà, thật thú vị. Để có được hiệu suất tối đa có thể từ T & L phần cứng, bạn cần lưu trữ dữ liệu đỉnh của bạn trên GPU. Rốt cuộc, đó là GPU thực sự muốn sử dụng dữ liệu đỉnh của bạn.

Trong D3D v7, Microsoft đã giới thiệu khái niệm về bộ đệm Vertex. Chúng được phân bổ các bộ nhớ GPU để lưu trữ dữ liệu đỉnh.

Bạn muốn biết khi nào OpenGL có tương đương với điều này? Oh, NVIDIA, là người yêu thích tất cả mọi thứ OpenGL (miễn là chúng là các phần mở rộng NVIDIA độc quyền), đã phát hành phần mở rộng phạm vi mảng đỉnh khi GeForce 256 lần đầu tiên ra mắt. Nhưng khi nào thì ARB quyết định cung cấp chức năng tương tự?

Hai năm sau . Điều này là sau khi họ chấp thuận các shader đỉnh và phân đoạn (pixel trong ngôn ngữ D3D). Đó là mất bao lâu để ARB phát triển một giải pháp đa nền tảng để lưu trữ dữ liệu đỉnh trong bộ nhớ GPU. Một lần nữa, một cái gì đó mà T & L phần cứng cần để đạt được hiệu suất tối đa.

Một ngôn ngữ để hủy hoại tất cả

Vì vậy, môi trường phát triển OpenGL đã bị phá vỡ trong một thời gian. Không có shader phần cứng chéo, không lưu trữ đỉnh GPU phần cứng chéo, trong khi người dùng D3D thích cả hai. Nó có thể trở nên tồi tệ hơn?

Bạn ... bạn có thể nói như vậy. Nhập phòng thí nghiệm 3D .

Họ là ai, bạn có thể hỏi? Họ là một công ty không còn tồn tại mà tôi coi là kẻ giết người thực sự của OpenGL. Chắc chắn, sự bất lực chung của ARB khiến OpenGL dễ bị tổn thương khi đáng lẽ phải sở hữu D3D. Nhưng 3D Labs có lẽ là lý do lớn nhất đối với tôi đối với trạng thái thị trường hiện tại của OpenGL. Họ có thể làm gì để gây ra điều đó?

Họ đã thiết kế Ngôn ngữ tạo bóng OpenGL.

Hãy xem, 3D Labs là một công ty đang hấp hối. GPU đắt tiền của họ đã bị thiệt thòi bởi áp lực ngày càng tăng của NVIDIA trên thị trường máy trạm. Và không giống như NVIDIA, 3D Labs không có bất kỳ sự hiện diện nào trên thị trường chính thống; Nếu NVIDIA thắng, họ đã chết.

Mà họ đã làm.

Vì vậy, trong nỗ lực duy trì sự phù hợp trong một thế giới không muốn sản phẩm của họ, Phòng thí nghiệm 3D đã xuất hiện trước Hội nghị nhà phát triển trò chơi với các bài thuyết trình cho thứ mà họ gọi là "OpenGL 2.0". Đây sẽ là bản viết lại hoàn chỉnh, từ đầu của API OpenGL. Và điều đó có ý nghĩa; có rất nhiều hành trình trong API của OpenGL tại thời điểm đó (lưu ý: hành trình đó vẫn tồn tại). Chỉ cần nhìn vào cách tải kết cấu và ràng buộc làm việc; đó là bán hồ quang.

Một phần trong đề xuất của họ là một ngôn ngữ tô bóng. Một cách tự nhiên. Tuy nhiên, không giống như các tiện ích mở rộng ARB đa nền tảng hiện tại, ngôn ngữ tô bóng của chúng là "cấp độ cao" (C là cấp độ cao đối với ngôn ngữ tạo bóng. Có, thực sự).

Bây giờ, Microsoft đang làm việc trên ngôn ngữ tạo bóng cấp cao của riêng họ. Mà họ, trong tất cả trí tưởng tượng tập thể của Microsoft, được gọi là ... Ngôn ngữ tô bóng cấp cao (HLSL). Nhưng chúng là một cách tiếp cận cơ bản khác nhau đối với các ngôn ngữ.

Vấn đề lớn nhất với ngôn ngữ đổ bóng của 3D Labs là nó được tích hợp sẵn. Xem, HLSL là một ngôn ngữ được Microsoft định nghĩa. Họ đã phát hành một trình biên dịch cho nó và nó tạo ra mã lắp ráp Shader Model 2.0 (hoặc các mô hình shader mới hơn) mà bạn sẽ cung cấp cho D3D. Trong D3D v9 ngày, HLSL không bao giờ được D3D chạm trực tiếp. Đó là một sự trừu tượng tốt đẹp, nhưng nó hoàn toàn là tùy chọn. Và một nhà phát triển luôn có cơ hội đi sau trình biên dịch và điều chỉnh đầu ra để có hiệu suất tối đa.

Ngôn ngữ Phòng thí nghiệm 3D không có điều đó. Bạn đã cho trình điều khiển ngôn ngữ giống như C, và nó tạo ra một shader. Kết thúc câu chuyện. Không phải là một shader lắp ráp, không phải thứ bạn cho ăn thứ khác. Đối tượng OpenGL thực tế đại diện cho một shader.

Điều này có nghĩa là người dùng OpenGL đã mở ra cho những nhà phát triển mơ hồ, những người vừa mới bắt đầu biên dịch các ngôn ngữ giống như lắp ráp. Các lỗi trình biên dịch chạy tràn lan trong Ngôn ngữ tạo bóng OpenGL (GLSL) mới được đặt tên. Tệ hơn nữa, nếu bạn quản lý để có được một trình đổ bóng để biên dịch trên nhiều nền tảng một cách chính xác (không có nghĩa là kỳ công), bạn vẫn phải tuân thủ các trình tối ưu hóa trong ngày. Mà không tối ưu như họ có thể.

Mặc dù đó là lỗ hổng lớn nhất trong GLSL, nhưng đó không phải là lỗ hổng duy nhất. Cho đến nay .

Trong D3D và trong các ngôn ngữ lắp ráp cũ hơn trong OpenGL, bạn có thể trộn và khớp các shader đỉnh và phân đoạn (pixel). Vì vậy, miễn là chúng giao tiếp với cùng một giao diện, bạn có thể sử dụng bất kỳ trình tạo bóng đỉnh nào với bất kỳ trình tạo mảnh phân mảnh tương thích nào. Và thậm chí có mức độ không tương thích mà họ có thể chấp nhận; một shader đỉnh có thể viết một đầu ra mà shader mảnh không đọc được. Và kể từ đó trở đi.

GLSL không có bất kỳ thứ gì trong số đó. Vertex và shader mảnh đã được hợp nhất với nhau trong cái mà 3D Labs gọi là "đối tượng chương trình". Vì vậy, nếu bạn muốn chia sẻ các chương trình đỉnh và phân đoạn, bạn phải xây dựng nhiều đối tượng chương trình. Và điều này gây ra vấn đề lớn thứ hai.

Hãy xem, 3D Labs nghĩ rằng họ đang thông minh. Họ dựa trên mô hình biên dịch của GLSL trên C / C ++. Bạn lấy một .c hoặc .cpp và biên dịch nó thành một tệp đối tượng. Sau đó, bạn lấy một hoặc nhiều tệp đối tượng và liên kết chúng vào một chương trình. Vì vậy, đó là cách GLSL biên dịch: bạn biên dịch trình đổ bóng của bạn (đỉnh hoặc đoạn) thành một đối tượng đổ bóng. Sau đó, bạn đặt các đối tượng đổ bóng đó vào một đối tượng chương trình và liên kết chúng lại với nhau để tạo thành chương trình thực tế của bạn.

Mặc dù điều này đã cho phép những ý tưởng tuyệt vời tiềm năng như có các shader "thư viện" có chứa mã bổ sung mà các shader chính có thể gọi, nhưng thực tế nó có nghĩa là các shader đã được biên dịch hai lần . Một lần trong giai đoạn biên dịch và một lần trong giai đoạn liên kết. Trình biên dịch của NVIDIA nói riêng được biết đến về cơ bản là chạy trình biên dịch hai lần. Nó không tạo ra một số loại trung gian mã đối tượng; nó chỉ biên dịch nó một lần và ném đi câu trả lời, sau đó biên dịch lại vào lúc liên kết.

Vì vậy, ngay cả khi bạn muốn liên kết shader đỉnh của mình với hai shader mảnh khác nhau, bạn phải biên dịch nhiều hơn so với trong D3D. Đặc biệt là vì việc biên dịch ngôn ngữ giống như C đã được thực hiện ngoại tuyến , không phải lúc bắt đầu thực hiện chương trình.

Có những vấn đề khác với GLSL. Có lẽ có vẻ sai lầm khi đổ lỗi cho Phòng thí nghiệm 3D, vì ARB cuối cùng đã chấp thuận và kết hợp ngôn ngữ (nhưng không có gì khác trong sáng kiến ​​"OpenGL 2.0" của họ). Nhưng đó là ý tưởng của họ.

Và đây là phần thực sự đáng buồn: 3D Labs đã đúng (hầu hết). GLSL không phải là ngôn ngữ tạo bóng dựa trên vectơ theo cách của HLSL tại thời điểm đó. Điều này là do phần cứng của 3D Labs là phần cứng vô hướng (tương tự phần cứng NVIDIA hiện đại), nhưng cuối cùng họ đã đúng theo hướng mà nhiều nhà sản xuất phần cứng đã đi với phần cứng của họ.

Họ đã đúng khi đi với một mô hình biên dịch trực tuyến cho một ngôn ngữ "cấp cao". D3D thậm chí đã chuyển sang cuối cùng.

Vấn đề là Phòng thí nghiệm 3D đã đúng lúc . Và trong khi cố gắng triệu tập tương lai quá sớm, khi cố gắng trở thành bằng chứng trong tương lai, họ đã gạt bỏ hiện tại . Nghe có vẻ giống như cách OpenGL luôn có khả năng cho chức năng T & L. Ngoại trừ việc đường ống T & L của OpenGL vẫn hữu ích trước T & L phần cứng, trong khi GLSL là trách nhiệm trước khi thế giới bắt kịp nó.

GLSL là một ngôn ngữ tốt bây giờ . Nhưng cho thời gian? Thật là kinh khủng. Và OpenGL phải chịu đựng điều đó.

Rơi về phía Apotheosis

Trong khi tôi duy trì rằng Phòng thí nghiệm 3D đã giáng một đòn chí mạng, thì chính ARB là người sẽ đóng chiếc đinh cuối cùng vào quan tài.

Đây là một câu chuyện mà bạn có thể đã nghe nói. Vào thời điểm OpenGL 2.1, OpenGL đã gặp sự cố. Nó đã có rất nhiều di sản. API không còn dễ sử dụng nữa. Có 5 cách để làm mọi thứ và không có ý tưởng nào là nhanh nhất. Bạn có thể "học" OpenGL bằng các hướng dẫn đơn giản, nhưng bạn không thực sự học API OpenGL mang lại cho bạn hiệu năng thực sự và sức mạnh đồ họa.

Vì vậy, ARB đã quyết định thử phát minh lại OpenGL. Điều này tương tự như "OpenGL 2.0" của 3D Labs, nhưng tốt hơn vì ARB đứng sau nó. Họ gọi nó là "Đỉnh dài".

Điều gì là xấu khi dành một chút thời gian để cải thiện API? Điều này thật tệ vì Microsoft đã để bản thân dễ bị tổn thương. Hãy xem, đây là thời điểm chuyển đổi Vista.

Với Vista, Microsoft quyết định đưa ra một số thay đổi rất cần thiết trong trình điều khiển hiển thị. Họ buộc các trình điều khiển phải nộp lên HĐH để ảo hóa bộ nhớ đồ họa và nhiều thứ khác.

Mặc dù người ta có thể tranh luận về giá trị của điều này hoặc liệu nó có thực sự khả thi hay không, nhưng thực tế vẫn là: Microsoft coi D3D 10 chỉ là Vista (và ở trên). Ngay cả khi bạn có phần cứng có khả năng D3D 10, bạn không thể chạy các ứng dụng D3D 10 mà không chạy Vista.

Bạn cũng có thể nhớ rằng Vista ... ừm, hãy nói rằng nó không hoạt động tốt. Vì vậy, bạn đã có một hệ điều hành hoạt động kém, một API mới chỉ chạy trên HĐH đó và một thế hệ phần cứng mới cần API và HĐH đó để làm bất cứ điều gì nhanh hơn thế hệ trước.

Tuy nhiên, các nhà phát triển có thể truy cập các tính năng của lớp D3D 10 thông qua OpenGL. Chà, họ có thể nếu ARB không bận rộn làm việc trên Longs Peak.

Về cơ bản, ARB đã dành một năm làm việc tốt và một nửa đến hai năm để làm cho API tốt hơn. Vào thời điểm OpenGL 3.0 thực sự ra mắt, việc áp dụng Vista đã hết, Win7 đã sẵn sàng để đặt Vista phía sau họ và hầu hết các nhà phát triển trò chơi không quan tâm đến các tính năng của lớp D3D-10. Rốt cuộc, phần cứng D3D 10 chạy các ứng dụng D3D 9 tốt. Và với sự gia tăng của các cổng PC-to-console (hoặc các nhà phát triển PC chuyển sang phát triển giao diện điều khiển. Hãy lựa chọn), các nhà phát triển không cần các tính năng của lớp D3D 10.

Bây giờ, nếu các nhà phát triển đã truy cập vào các tính năng đó sớm hơn thông qua OpenGL trên các máy WinXP, thì việc phát triển OpenGL có thể đã nhận được một cú đánh rất cần thiết trong tay. Nhưng ARB đã bỏ lỡ cơ hội của họ. Và bạn có muốn biết phần tồi tệ nhất?

Mặc dù đã dành hai năm quý báu để cố gắng xây dựng lại API từ đầu ... họ vẫn thất bại và chỉ quay trở lại hiện trạng (ngoại trừ cơ chế khấu hao).

Vì vậy, ARB không chỉ bỏ lỡ một cửa sổ cơ hội quan trọng , họ thậm chí còn không hoàn thành nhiệm vụ khiến họ bỏ lỡ cơ hội đó. Khá nhiều sử thi thất bại tất cả xung quanh.

Và đó là câu chuyện về OpenGL so với Direct3D. Một câu chuyện về những cơ hội bị bỏ lỡ, sự ngu ngốc thô thiển, sự mù quáng cố ý và sự dại dột đơn giản.


24
Bạn đã có điều này được viết lên ở đâu đó, hoặc bạn đã viết nếu ra khỏi đỉnh đầu của bạn?
Kristofer Hồ Chí Minh

38
@Kristofer: Tôi không biết liệu bạn có thể gọi nó là "ngoài đỉnh đầu" cho một thứ gì đó mất khoảng một giờ để sáng tác hay không, nhưng tôi đã không viết nó ở đâu đó.
Nicol Bolas

18
@ F.Aquino: Vì vậy, bạn có sẵn sàng gán điều này cho hệ thống kết xuất mà các trò chơi FPS sử dụng, thay vì chính động cơ không? Mặc dù CS dựa trên Half-Life 1, dựa trên Quake? Lấy làm tiếc; không mua nó Cấp, tôi không mua tiền đề rằng FPS mới không có tiềm năng thể thao điện tử, mặc dù có rất nhiều giải đấu thể thao điện tử tập trung vào các FPS mới hơn. Họ có thể không có sức hấp dẫn giống như CS đối với một số người chơi, nhưng đừng phạm sai lầm khi nghĩ rằng những người chơi đó tạo nên tất cả các môn thể thao điện tử FPS.
Nicol Bolas

165
Ồ Tôi thậm chí không quan tâm đến hầu hết những thứ này và nó vẫn là một cuốn sách tuyệt vời!
Peter Rowell

12
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).Đã chơi hơn 6 phút tại đây.
Người học việc

133

Tôi thấy lạ là mọi người tập trung vào cơ sở người dùng, khi câu hỏi là 'nhà phát triển trò chơi', không phải 'người chỉnh sửa trò chơi'.

Đối với tôi, là một nhà phát triển, Linux là một mớ hỗn độn đẫm máu. Có rất nhiều phiên bản, trình quản lý máy tính để bàn, bộ giao diện người dùng, v.v ... Nếu tôi không muốn phân phối tác phẩm của mình dưới dạng nguồn mở, nơi người dùng có thể (cố gắng) biên dịch lại để nó phù hợp với sự kết hợp độc đáo của các gói, thư viện và cài đặt, đó là một cơn ác mộng !

Mặt khác, Microsoft đang cung cấp (hầu hết thời gian) khả năng tương thích ngược đáng kinh ngạc và sự ổn định nền tảng. Có thể nhắm mục tiêu toàn bộ phạm vi máy với một trình cài đặt nguồn đóng, ví dụ như các máy tính chạy Windows XP, Vista và 7, 32 và 64 bit, mà không cần cài đặt lại phân phối DX hoặc VC thích hợp, v.v ...

Một điều cuối cùng, XIN VUI LÒNG MỌI THỨ TRÊN INTERNET STOP SO SÁNH OPENGL VÀ TRỰC TIẾP! Hoặc so sánh Direct3D vs OpenGL hoặc không làm điều này . DirectX cung cấp hỗ trợ đầu vào, hỗ trợ âm thanh, phát phim, v.v. mà OpenGL không có.


40
"Đối với tôi, là một nhà phát triển, Linux là một mớ hỗn độn đẫm máu." Thật! Tôi làm việc trong một môi trường với Fedora và Ubuntu. Chúng tôi có vấn đề ngay cả giữa chỉ hai. (Tôi phải thêm Tôi là một fanboy Linux.)
David Poole

48
@ jv42: Đây có vẻ là một quan niệm sai lầm phổ biến: Hầu như tất cả các phiên bản và trình quản lý máy tính để bàn và bộ công cụ UI, v.v ... đều không liên quan đến việc khởi động và làm việc trò chơi. Nếu trò chơi của bạn (như được vận chuyển) phụ thuộc nhiều hơn libGL, libX11 và libasound (hoặc libopenal hoặc libao hoặc liboss), bạn đã làm sai điều gì đó.
greyfade

19
@greyfade "Nếu trò chơi của bạn (như được vận chuyển) phụ thuộc nhiều hơn libGL, libX11 và libasound (hoặc libopenal hoặc libao hoặc liboss), bạn đã làm sai điều gì đó." - Và sau đó bạn liên kết với libao-0.0.4alpha và người dùng của bạn có libao-0.0.5beta và không có gì hoạt động.
quant_dev

17
Đóng gói một tệp nhị phân để nó chạy trên tất cả các bản phân phối Linux không khó lắm. Heck, các nhà phát triển Blender làm điều đó với mỗi bản phát hành. Chỉ có gói phát hành Linux một (hai, 32 bit và 64 bit) của Blender.
datenwolf

8
Người dùng Linux trả nhiều tiền hơn cho các trò chơi. Xem: koonsolo.com/news/linux-users-show-their-love-for-indie-game2dboy.com/2009/10/26/pay-what-you-want-bapt-sale-wrap-up
Alexander

88

Đó là bởi vì có nhiều người dùng Windows trên hành tinh hơn Linux và Mac. Sự thật là mọi người làm mọi thứ cho bất cứ nơi nào có thị trường lớn nhất.
Điều tương tự cũng xảy ra với điện thoại di động: Android và iPhone có những trò chơi tuyệt vời nhưng Windows Mobile và Symbian thì không ...


24
@Mahmoud Hossam: Điều đó không đúng. Sử dụng OpenGL không có nghĩa là toàn bộ ứng dụng của bạn sẽ hoạt động một cách kỳ diệu trong môi trường * nix, điều đó có nghĩa là công cụ đồ họa sẽ (và thậm chí sau đó không có nghĩa là không có quirks trên (ví dụ) Windows không tồn tại trên Linux và ngược lại). Đó không phải là toàn bộ giỏ hàng và chắc chắn có một chi phí đáng kể để duy trì mã của họ cho nhiều nền tảng.
Ed S.

5
@Mahmoud: Chính xác. Và nếu bạn không muốn chuyển sang Linux / Mac OS, thì tại sao không sử dụng thư viện gốc? DirectX được hỗ trợ tốt hơn nhiều trên Windows so với OpenGL.
Dean Harding

10
@Mahmoud: toàn bộ tiền đề của câu hỏi là "tại sao các nhà phát triển thích Windows". Trả lời: bởi vì đó là những gì game thủ sử dụng. Không có điểm nào chuyển sang Linux / Mac nếu nó chỉ chiếm 2% thị trường của bạn và trong trường hợp đó, không có điểm nào sử dụng OpenGL nếu bạn sẽ không chuyển sang cổng nào.
Dean Harding

4
@Mahmoud, đây không phải là công việc của nhà phát triển trò chơi để khiến mọi người chuyển sang Linux.
GrandmasterB

6
@ John hơn 10 triệu người chơi World of Warcraft muốn có một lời với bạn. Và đây chỉ là một trò chơi.
Marcelo

50

Bởi vì Windows chiếm hơn 90% thị phần và Linux (vì bạn đã hỏi cụ thể về Linux) có tiếng là có rất nhiều người dùng không muốn trả tiền cho phần mềm. Dù điều đó có đúng hay không thì nó không liên quan; nhận thức là có và nó ảnh hưởng đến quyết định của mọi người.


1
Nếu các nhà phát triển sử dụng OpenGL, nó sẽ hỗ trợ cả Windows và linux, vì vậy đây thực sự sẽ là lợi thế tiếp thị để thu hút người dùng Linux sẵn sàng trả tiền và đang sử dụng Linux vì họ tin rằng nó tốt hơn.
M.Sameer

9
Ngay cả khi sử dụng OpenGL cũng có chi phí trong việc phát triển và thử nghiệm đa nền tảng mà thị trường Linux không chứng minh được. Directx cũng (đáng buồn) là một nền tảng tốt hơn để chơi game PC tại thời điểm này so với OpenGL - có rất ít trò chơi mới trên PC được xây dựng trên OpenGL.
Martin Beckett

25
Nền tảng chéo không đơn giản như "chỉ mã cho OpenGL".
Hệ thống xuống

13
Thực tế không phải vậy, người dùng Linux sẽ không trả tiền cho phần mềm. Humble Indie Bundle (một gói trò chơi bạn có thể nhận được cho bất kỳ số tiền nào bạn muốn trả) đã được thực hiện hai lần và mỗi lần nó cho thấy người dùng Linux trả nhiều hơn người dùng Windows cho gói này.
Htbaa

9
@Htbaa Tất nhiên họ đã trả nhiều tiền hơn, họ rất tuyệt vọng, đây có lẽ là trò chơi duy nhất họ chơi trên hệ điều hành của họ.
Marcelo

11

Vì Windows được hỗ trợ bởi một tổ chức lớn, nên hơn một thập kỷ trước họ đã quyết định họ muốn phát triển trò chơi xảy ra trên nền tảng của họ .

Điều này không đúng với Mac và hiện tại nó không đúng. Ngay cả đối với iOS. Apple không cung cấp các công cụ để phát triển trò chơi iOS. Nhưng đó là một thị trường rộng lớn (ngoài kia có nhiều iPhone hơn so với PC năm 1995) với sự cạnh tranh tương đối ít, vì vậy mọi người làm điều đó bằng mọi cách.

Đối với Linux, thậm chí không có một số loại tổ chức trung tâm, có thể đặt ra bất kỳ loại ưu tiên nào. Định hướng mà Linux đang đi, ít được xác định bởi một nhóm các lập trình viên rất giỏi, nhưng hơi bất thường.

Để tạo ra một trò chơi PC ngày nay, bạn cần rất nhiều nghệ sĩ 2d / 3d, nhà thiết kế trò chơi, người viết kịch bản, diễn viên, người thử nghiệm và những gì không. Đối với lập trình thực tế, bạn có thể chỉ cần sử dụng một công cụ trò chơi thực tế (CryEngine, Unreal Engine, Quake Engine, Source Engine). Vì vậy, bạn có thể có thể làm toàn bộ mà không cần bất kỳ lập trình viên thực tế.

Vì điều đó và vì bản chất của các doanh nghiệp, các lập trình viên ít nói về việc lựa chọn nền tảng nào. Và thông thường, các nhà quản lý tìm kiếm sự hỗ trợ, đó là điều mà Microsoft tuyên bố sẽ cung cấp và để đối phó với những thứ có thể nắm bắt được bằng cách nào đó đối với những suy nghĩ của họ, điều mà nguồn mở thì không.

Vì lý do đó, hầu hết phát triển phần mềm người dùng cuối thương mại được thực hiện trên windows.
Tôi làm việc cho một công ty, tạo ra các trò chơi flash, và do đó không bị ràng buộc với một nền tảng cụ thể. Tuy nhiên, tất cả chúng ta đều phát triển trên windows, vì hầu hết các công cụ chúng ta sử dụng đều không có sẵn cho Linux.


2
"Vì vậy, bạn có thể có thể làm toàn bộ mà không cần bất kỳ lập trình viên thực tế." Bạn quên mất sự mỉa mai.
Allon Guralnek

@ ALLonGuralnek: Không có châm biếm ở đó. Trong phát triển trò chơi cổ điển của các trò chơi lớn, các lập trình viên sẽ tạo ra các công cụ và phương tiện để cung cấp nội dung và hành vi (thông qua các trình soạn thảo trực quan hoặc kịch bản thực tế) và sau đó các nhà thiết kế trò chơi / cấp độ / nhiệm vụ sẽ sử dụng các phương tiện đó. Nếu bạn mua một động cơ hoạt động và đủ mạnh, về cơ bản bạn có thể cắt bỏ bước một.
back2dos

2
Bạn có một ví dụ cụ thể về một trò chơi đáng chú ý được tạo ra mà không cần viết một dòng mã nào không?
Allon Guralnek

1
@ ALLonGuralnek: Tôi không nói ai sẽ tạo trò chơi mà không có , nhưng không có lập trình viên . Bạn không cần phải là lập trình viên để tạo một mod hoàn toàn thay đổi trò chơi. DotA là trò chơi phổ biến nhất mà tôi có thể nghĩ ra khỏi đỉnh đầu.
back2dos

1
@ ALLonGuralnek: Không. Những người viết mã là những người viết mã. Nhà thiết kế cấp độ được yêu cầu phải có sự hiểu biết nhất định về kịch bản. Nhiều lập trình viên thường được yêu cầu phải có một số kỹ năng quản lý nhất định. Nó không làm cho người đầu tiên trở thành một lập trình viên, cũng không phải người thứ hai làm người quản lý. Ngoài ra đánh giá của bạn về DotA là sai. Đầu tiên, nó hoàn toàn thay đổi trò chơi, biến RTS thành một thể loại mới và thứ hai, nó được coi là một trò chơi riêng biệt bởi nhiều giải đấu eSports bao gồm ESWC
back2dos

10

Như một số người đã nói, phần quan trọng nhất là cơ sở người dùng. 95% người dùng PC sử dụng Windows. Game thủ PC sử dụng hầu như Windows. Ngay cả những người sử dụng Mac hoặc Linux thường chạy các trò chơi Windows thông qua một số mô phỏng hoặc ảo hóa (với rất, rất ít ngoại lệ).

Nhưng nhân khẩu học không phải là tất cả. Tôi sẽ không đánh giá thấp phần mà Microsoft đang làm để làm cho nền tảng này hấp dẫn hơn đối với các nhà phát triển trò chơi. Về cơ bản, bạn có được bộ công cụ đầy đủ tính năng miễn phí , quan trọng nhất là XNA Game Studio . Điều này cho phép không chỉ phát triển cho Windows mà còn cho Xbox360 . Và với phiên bản mới nhất ngay cả đối với điện thoại WP7. Rõ ràng vì đây là công cụ của Microsoft, nó sử dụng DirectX chứ không phải OpenGL.


3
Lưu ý cho bất kỳ độc giả du hành thời gian nào: Kể từ tháng 4 năm 2014, XNA sẽ chính thức bị khai tử. Bản phát hành cuối cùng (4.0) đã được xuất bản vào năm 2010 và sẽ không được xem phiên bản mới từ nay (2013) và đó là hoàng hôn.
Aren

1
Một lưu ý khác cho bất kỳ độc giả du hành thời gian nào: sự phát triển của Windows 8 (trở lên) sẽ không còn miễn phí trong tương lai.
Fouric

6

Ewwww, tôi không. Tôi sử dụng Linux gần như độc quyền. Tôi khởi động kép lên Windows để tạo các bản dựng Windows và sử dụng Mac cho các bản dựng Mac, nhưng đó là nó.

Bí quyết là một khung đa nền tảng mà chúng tôi đã phát triển trong nhiều năm qua. Các trò chơi của chúng tôi được xây dựng dựa trên điều đó và hoạt động giống hệt nhau trong Linux / OpenGL, Mac / OpenGL và Windows / Direct3D (và sắp có trong iOS / OpenGL).

Phải thừa nhận rằng công ty của tôi không làm các tựa game AAA, vì vậy nó có thể không áp dụng cho các tựa game này, nhưng chúng tôi tạo ra các trò chơi thông thường hàng đầu (xem trang web - CSI: NY, Murder She Wrote và hai năm 2011 sắp tới là những ví dụ về các tiêu đề sử dụng giấy phép quan trọng, Các trường hợp bị mất của Sherlock Holmes 1 và 2 cũng khá thành công)

Tôi sẽ không từ bỏ gedit + gcc + gdb + valgrind cho bất cứ điều gì khác.


3
gedit bị đánh giá thấp cho lập trình
Alexander

2
@Alexander, bị đánh giá thấp thậm chí không bắt đầu giải thích
Shahbaz

3
Xin lỗi, cuối cùng tôi đã từ bỏ gedit. Bây giờ tôi sử dụng gvim và tôi hạnh phúc hơn nhiều :)
ggambett

4
  1. Quán tính. Nếu trước đây bạn đã sử dụng Windows thì việc chuyển sang một thứ khác là một rắc rối. Nếu bạn đang sử dụng Windows DirectX thì dễ dàng hơn và có khả năng hoạt động tốt hơn OpenGL.
  2. Thị phần. Thị phần của Windows trên máy tính để bàn lớn hơn so với OS X, lần lượt lớn hơn so với Linux. Nói chuyện tiền bạc.
  3. Nhãn hiệu. DirectX được biết đến nhiều hơn những thứ như SDL (đây là thứ bạn cần để sao chép một số tính năng của DirectX vượt ra ngoài OpenGL).
  4. Ít nhầm lẫn. Linux của người dùng sẽ chỉ hỗ trợ tối đa OpenGL 1.4 hoặc OpenGL 2+? Bạn có thể sử dụng hướng dẫn OpenGL 2.0 như Giới thiệu về OpenGL hiện đại không. Chương 1: Đường ống đồ họa trên phiên bản Linux của bạn?

Ngày nay, Linux trở nên hấp dẫn hơn khi phát triển trò chơi và hầu hết các nhà phát triển sẽ tốt hơn khi thực hiện phiên bản cổng OS X trước phiên bản Linux (xem những thứ như Steam). Thậm chí sau đó thị trường console còn đáng giá hơn cả hai nền tảng này kết hợp cho các trò chơi ...

Nếu bạn muốn nền tảng đơn điệu DirectX là tốt. Nếu bạn muốn trở thành nền tảng chéo, có nhiều khả năng bạn sẽ phải dùng OpenGL trên ít nhất một số nền tảng khác.


2
Câu trả lời cho câu hỏi 4 là: 2+. Mesa3D hỗ trợ tối đa OpenGL 2.1, có nghĩa là tất cả các trình điều khiển đồ họa cho phần cứng 3D cho X11 đều hỗ trợ ít nhất OpenGL 2.1 kể từ phiên bản Mesa 6.8. Điều đó bao gồm tất cả các bản phát hành Linux được phát hành trong vài năm qua và các trình điều khiển nhị phân mà NVIDIA và AMD hỗ trợ 3.0 trở lên. Điều này không bao gồm người dùng của intel895, nhưng họ đã không được chấp nhận.
greyfade

1
Tôi sợ đây không phải là trường hợp. Các máy tính có chipset i915 / i945 (GMA 900/950) đang (vẫn) được bán và không bị phản đối. Ngay cả trên các bản phân phối hiện đại từ vài tháng trước (Ubuntu 11.04 / Fedora 15) glxinfo sẽ trả về phiên bản OpenGL không cao hơn 1.4 (Mesa 7.11-devel). Phần cứng Intel như vậy đơn giản là không thể làm các phiên bản mới hơn mà không có phần mềm trợ giúp vì vậy cho đến khi softpipe có sẵn theo mặc định, Linux trên các thẻ như vậy sẽ không bao giờ làm phiên bản OpenGL cao hơn. Nhắm mục tiêu OpenGL 2.0 (hoặc cao hơn) sẽ ngăn chương trình chạy trên nhiều hệ thống máy tính để bàn Linux ...
Anon

Mặc dù vậy, tôi không thấy mối quan tâm. Những chipset tương tự cũng có những hạn chế trên Windows, vì vậy hầu hết các game nặng về đồ họa sẽ không còn là vấn đề nữa.
greyfade

4

Câu trả lời là rõ ràng. Mục tiêu của việc viết một trò chơi là kiếm tiền. Nhiều người dùng cuối chạy Windows, do đó có một thị trường lớn hơn và bạn sẽ kiếm được nhiều tiền hơn từ một trò chơi Windows hơn là một trò chơi Linux. Nó đơn giản mà.

Nếu bạn tự hỏi mình câu hỏi 'Tại sao ai đó làm ...', chỉ cần nhớ rằng tiền làm thế giới quay tròn.


1
Có nhưng bạn có thể tạo một trò chơi đa nền tảng và nhận được nhiều hơn là chỉ người dùng windows;)
M.Sameer

Là đa nền tảng không phải là tất cả. Nếu số lượng người dùng bổ sung bạn nhận được là một tỷ lệ tương đối thấp thì bạn cần phải cân bằng giữa chi phí phát triển thêm và chi phí hỗ trợ liên tục so với số tiền bạn sẽ nhận thêm từ họ và đưa ra quyết định dựa trên dữ liệu cứng thực tế. Không có câu trả lời đúng hay sai trên toàn cầu cho câu hỏi đó, nhưng có một câu trả lời đúng hoặc sai cho từng chương trình riêng lẻ và những gì đúng cho một chương trình có thể sai cho một chương trình khác.
Maximus Minimus

4

Công cụ, công cụ, công cụ.

Đó là những gì nó đi xuống. Phát triển trên Windows và bạn có quyền truy cập vào một số công cụ phát triển tốt nhất trên hành tinh. Thậm chí không có gì đến gần với trình gỡ lỗi của Visual Studio, Runtimes DirectX là tuyệt vời, PIX là tuyệt vời và tương đương không thể tồn tại trên các nền tảng / API khác. Chắc chắn, có một số thứ tốt ở đó; Tôi không nói rằng các công cụ trên các nền tảng khác là xấu, nhưng những công cụ mà MS cung cấp vượt xa so với gói (ngoại lệ danh dự: Valgrind) thậm chí còn không hài hước.

Điểm mấu chốt là những công cụ này giúp bạn. Họ giúp bạn hoàn thành công việc, họ giúp bạn làm việc hiệu quả, họ giúp bạn tập trung vào các lỗi trong mã của riêng bạn thay vì vật lộn với một API không bao giờ hoạt động như tài liệu.


PIX tuyệt vời. Gỡ lỗi shader bằng cách nhấp vào một pixel khó chịu và xem những gì đã xảy ra là tuyệt vời!
Chris Pitman

4

Vì vậy, tôi đã xem qua tất cả các câu trả lời này, và là một nhà phát triển trò chơi có mã trên các trò chơi console đã có mặt trên kệ Walmart, tôi có một câu trả lời rất khác.

Phân phối.

Hãy xem, nếu bạn muốn sử dụng máy chơi game Nintendo, bạn phải xin phép Nintendo, mua từ các nhà máy của Nintendo, trả chi phí cho Nintendo, thương lượng với Walmart, giao dịch với kho, bạn cần tiền trước để sản xuất, in hộp, vận chuyển , để làm tất cả các bảo hiểm, et cetera.

Nếu bạn muốn vào XBox, chắc chắn có XBLA, nhưng bạn vẫn cần sự phù hộ của Microsoft, bạn phải đợi đến lượt mình, hàng chục ngàn đô la chỉ để phát hành một bản vá, v.v.

Trên iOS, bạn vẫn cần Apple ổn, và họ có thể (và làm) một cách nghiêm túc kéo bạn.

Trên Steam, bạn vẫn cần sự cho phép của Valve hoặc đèn xanh và rất nhiều tiền.

.

Trên Windows? Bạn thiết lập một trang web và một nút tải xuống.

.

Tôi không nói rằng các nền tảng khác không có giá trị. Nhưng có rất nhiều thứ * khủng khiếp đang diễn ra khi bạn đang cố gắng phát triển một trò chơi, với tôi, lời hứa về việc có thể tát một nhị phân trên một trang web và tập trung vào công việc - ít nhất là để bắt đầu - thực sự làm giảm rất nhiều rào cản thất bại tiềm năng.

"Chúng tôi có thể thực hiện cổng XBLA sau này, khi mọi thứ ổn định".

Và ở mức độ thấp hơn chắc chắn điều này cũng tốt cho Linux, và nếu bảy khách hàng tốt, bạn có thể bắt đầu từ đó.

Nhưng Windows có ba lợi thế lớn: phát triển mở thực sự, triển khai mở thực sự và một cơ sở khách hàng rất lớn, rất tích cực, quan tâm đến những thứ kỳ quặc.

Thật khó để tưởng tượng nơi khác tôi muốn bắt đầu.


3

Tôi nghĩ bạn nên đọc thêm về Lịch sử DirectXĐiều này .

Tôi nghĩ rằng MS đã chọn DX thay vì openGL vì họ thích khóa mọi người bằng hệ điều hành của riêng họ.


4
không, họ đã tạo DX vì OGL không được tối ưu hóa cho Windows, không thể mở rộng nhanh chóng để tận dụng lợi thế của sự phát triển phần cứng và hệ điều hành mới, không kết hợp âm thanh, kiểm soát đầu vào, v.v.
jwenting 22/03

2
iow DX chuyên dùng cho Windows vì lý do hiệu suất và cho phép Microsoft giữ nguyên như vậy và nhanh chóng kết hợp công nghệ mới khi có sẵn. OpenGL bị kẹt ở mức hỗ trợ phần cứng đồ họa đã tồn tại 5 năm trước, có thể nhiều hơn, bởi vì đó là một nỗ lực của cộng đồng.
jwenting

1
@jwenting Tôi không nghĩ hiệu suất là lý do duy nhất họ không chuyển nó sang các nền tảng khác, ý tôi là, nếu họ muốn chuyển nó, ít nhất họ sẽ mở nguồn và để nó cho cộng đồng thực hiện nó
Mahmoud Hossam

1
họ không mở nguồn C #, họ đã gửi đặc tả ngôn ngữ cho các cơ quan tiêu chuẩn. Microsoft là thành viên của các tổ chức tiêu chuẩn đó và luôn làm những việc như vậy (họ có những đóng góp lớn cho html, javascript và các tiêu chuẩn khác chẳng hạn). Tìm nguồn mở có nghĩa là sẽ phát hành mã nguồn cho trình biên dịch và thư viện theo một cái gì đó như APL.
jwent 23/03

1
@jwenting: Đối với bản ghi, có một triển khai Direct3D 10 và 11 trên Linux nhắm vào khung công tác Gallium3D. (Và nó không liên quan gì đến Wine.) Tôi cũng không đồng ý với khẳng định của bạn rằng "OGL không được tối ưu hóa cho Windows." Đó là vấn đề về triển khai trình điều khiển phần cứng, không phải là hạn chế của OpenGL.
greyfade

1

Rất nhiều điều phải làm với chính trị và kiểm soát. Vào cuối những năm 90, SGI và MS thực sự đã đồng ý kết hợp các nỗ lực:

http://en.wikipedia.org/wiki/Fahrenheit_graphics_API

SGI đầu tư rất nhiều vào dự án, MS thì không. SGI cần MS nhiều hơn MS cần SGI. Phần còn lại là lịch sử.

D3D và OpenGL là hai API rất khác nhau, tùy thuộc vào nhà phát triển để lựa chọn phù hợp với nhu cầu của bạn.


0

Đơn giản là vì Linux thất bại khủng khiếp như một hệ thống máy tính để bàn. Như ai đó đã chỉ ra trước đó Linux là một mớ hỗn độn cho các nhà phát triển (các thư viện khác nhau, bộ công cụ ui, v.v.)

Một vấn đề khác là freetardism và thiếu sự hỗ trợ cho phần mềm độc quyền. Nvidia luôn cung cấp các trình điều khiển (độc quyền) tốt cho Linux tuy nhiên Ubuntu và các bản phân phối khác không vận chuyển nó. Cũng không có giao diện trình điều khiển nhị phân có sẵn cho Linux như đối với Windows. (Có một tệp văn bản có tên binaryApiNonsense.txt hoặc một cái gì đó trong các nguồn Kernel) Đã nói rằng chỉ có phần cứng Nvidia được hỗ trợ đúng cách trong Linux. Bạn có thể chơi hầu hết các trò chơi phần mềm ID bằng phần cứng Nvidia trong Linux.

Điều tiếp theo công cụ phát triển. MSFT cung cấp hỗ trợ C ++ tuyệt vời và trình gỡ lỗi Visual Studio tốt hơn gdb đối với C ++. Cuối cùng nhưng không kém phần quan trọng, các công cụ khác bị thiếu như Photoshop. Ngoài ra .net cho phép bạn nhanh chóng tạo các công cụ gui. Nhiều studio trò chơi mã hóa các công cụ của họ để sử dụng nội bộ bằng cách sử dụng khung .net.

Tôi gần như quên mất: Hệ thống đồ họa khủng khiếp, trở lại những ngày họ mới chuyển X11 vì đó là thứ dễ nhất hoạt động. Họ đã thất bại trong việc thiết kế và triển khai một hệ thống đồ họa hiện đại mà OSx và Win có.


4
Hừm Thẻ intel và ati của tôi hoạt động tốt trong Linux ... Và có gì sai với X11? Tôi luôn cảm thấy nó tốt hơn nhiều so với các lựa chọn thay thế cho các HĐH khác (đặc biệt là Windows) vì kiến ​​trúc máy khách-máy chủ của nó.
thay thế

Không, họ không gõ glxinfo và xem thời tiết có tốt hay không! X11 là khủng khiếp bị hỏng chỉ là ví dụ theinvisiblethings.blogspot.com/2010/08/...
Nils

và nếu bạn đọc câu cuối cùng, Linus đã thực hiện bản vá cấp độ kernel - không phải là bản vá X11.
thay thế

1
Tôi không biết nhiều về hệ thống đồ họa (bạn có thể có một điểm) nhưng nói rằng Linux thất bại vì hệ thống máy tính để bàn là không đúng hoặc ít nhất là không chính xác. Tôi đã chuyển từ Windows sang Linux và tôi cảm thấy hiệu quả hơn bao giờ hết. Hiệu năng của Linux là và vượt trội so với Windows trong tất cả các máy tôi đã sử dụng. Tôi cũng không viết mã C ++ và tôi muốn biết Eclipse đứng ở đâu như một IDE C ++ so với Visual Studio.
M.Sameer

Đặt súng phun lửa xuống. Tôi nghĩ rằng ý kiến ​​thường được chấp nhận là VS là IDE tốt nhất. Tuy nhiên, Eclipse vẫn còn trẻ và có con đường để đi - chúng ta sẽ thấy. Tuy nhiên, tôi chỉ đơn giản là thích mọi thứ có thể dễ dàng viết được và có thể điều chỉnh được trong Linux!
Vorac
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.